springboot test_Spring Boot连接数据库的三种方式

本文详细介绍了Spring Boot连接数据库的三种方式:1) 使用jdbcTemplate,通过添加依赖、定义Dao接口及实现类、Controller类等实现数据交互;2) 结合JPA,通过添加Entity注解、继承JpaRepository实现自动化的数据库操作;3) 集成MyBatis,配置依赖并编写Mapper接口和实现类进行数据库操作。每种方式都通过Postman测试并验证了数据库连接的成功。

 对于后端springboot,我们在开发业务的时候会用到数据库,那么springboot怎样连接数据库呢

这里讲解springboot的三种连接数据库的方式。

01

准备工作

1、使用工具Navicat for MySQL创建一个本地数据库的连接test,然后创建一个数据库为springboot_test,最后执行以下脚本在springboot_test创建一个表test

可以参考文章: 本地化使用数据库对接springboot后端

DROP TABLE IF EXISTS `test`;CREATE TABLE `test` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',  `real_name` varchar(32) NOT NULL COMMENT '用户名称',  `nick_name` varchar(32) NOT NULL COMMENT '用户匿名',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

0a9b1dad8b12b616d9879ca985299727.png

2、使用https://start.spring.io/初始化一个springboot框架的maven工程

然后添加如下配置信息到工程的application.properties文件中。

spring.datasource.url = jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=truespring.datasource.username = XXXX(连接数据库的用户名)spring.datasource.password = XXXX(连接数据库的密码)spring.datasource.driverClassName = com.mysql.jdbc.Driverspring.datasource.type = com.alibaba.druid.pool.DruidDataSource

3、建立与数据库对应的POJO类

这里为了简化代码省去POJO类中get、set、toString方法,使用注解@Data,需要引入lombok依赖库

<dependency>      <groupId>org.projectlombokgroupId>      <artifactId>lombokartifactId>      <optional>trueoptional>dependency>

d914b3062fbd8d10e8695f25a3550d4b.png

02

方式一:与jdbcTemplate集成

使用jdbcTemplate来访问数据库,Spring Boot提供了stater来支持:

将下面依赖加入到工程的pom.xml文件中

<dependency>      <groupId>org.springframework.bootgroupId>      <artifactId>spring-boot-starter-jdbcartifactId>dependency>

定义Dao接口类:

b4fc7161e43f9466c2d32eeb62fc2aa6.png

Dao接口实现类:

package com.lhr.test.daoImpl;import java.util.HashMap;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;import org.springframework.stereotype.Repository;import com.lhr.test.dao.AuthorDao;import com.lhr.test.domain.Author;@Repositorypublic class AuthorDaoImpl implements AuthorDao {        @Autowired    private NamedParameterJdbcTemplate jdbcTemplate;    @Override    public int add(Author author) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        String sql = "insert into t_author(id,real_name,nick_name) " +                "values(:id,:realName,:nickName)";                Map param = new HashMap<>();        param.put("id",author.getId());        param.put("realName", author.getRealName());        param.put("nickName", author.getNickName());                return (int) jdbcTemplate.update(sql, param);    }    @Override    public int update(Author author) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return 0;    }    @Override    public int delete(Long id) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return 0;    }    @Override    public Author findAuthor(Long id) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return null;    }    @Override    public ListfindAuthorList() {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return null;    }}

AuthorService接口类:

package com.lhr.test.service;import java.util.List;import com.lhr.test.domain.Author;public interface AuthorService {    int add(Author author);    int update(Author author);    int delete(Long id);    Author findAuthor(Long id);    ListfindAuthorList();}

AuthorServiceImpl实现类:

package com.lhr.test.serviceImpl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.lhr.test.dao.AuthorDao;import com.lhr.test.domain.Author;import com.lhr.test.service.AuthorService;@Servicepublic class AuthorServiceImpl implements AuthorService {        @Autowired    AuthorDao mAuthorDao;    @Override    public int add(Author author) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return mAuthorDao.add(author);    }    @Override    public int update(Author author) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return mAuthorDao.update(author);    }    @Override    public int delete(Long id) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return mAuthorDao.delete(id);    }    @Override    public Author findAuthor(Long id) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return mAuthorDao.findAuthor(id);    }    @Override    public ListfindAuthorList() {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return mAuthorDao.findAuthorList();    }}

Controller类:

package com.lhr.test.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import com.lhr.test.domain.Author;import com.lhr.test.service.AuthorService;@RestController@RequestMapping("author")public class AuthorController {        @Autowired    AuthorService mAuthorService;        @RequestMapping("add")    @ResponseBody    public int add(@RequestBody Author author) {        return mAuthorService.add(author);            }    @RequestMapping("get")    @ResponseBody    public String get() {        return "HelloWorld";    }}

此时运行会报错,

由于未添加数据连接池依赖和mysql依赖导致的,在pom.xml文件中添加如下代码:

<dependency>      <groupId>com.alibabagroupId>      <artifactId>druid-spring-boot-starterartifactId>      <version>1.1.10version> dependency> <dependency>      <groupId>mysqlgroupId>      <artifactId>mysql-connector-javaartifactId>dependency>

运行成功后,用postman测试接口 http://localhost:8080/author/add

1a7946237d1b5ae72b307407cb8f0016.png

查看数据库中test表新增一条数据

fd886fa31ff56605235d372afbf99039.png

证明Spring Boot工程与jdbcTemplate集成成功,连接数据库成功!

最后附上一张工程代码结构图:

d84f0349bd83381dde1dfc37bf4d5c66.png

03

方式二:与JPA集成

使用JPA来访问数据库,Spring Boot提供了stater来支持:

将下面依赖加入到工程的pom.xml文件中

<dependency>      <groupId>org.springframework.bootgroupId>      <artifactId>spring-boot-starter-data-jpaartifactId> dependency>

对POJO类Author增加Entity的注解,并指定表名(如果不指定,默认的表名为author),然后指定ID的及其生成策略,这些都是JPA的知识,与Spring Boot无关,代码如下,红框部分是增加项:

e7c4883e27d2699105e7f872c89b556f.png

需要继承JpaRepository这个类,这里实现了两个查询方法,第一个是符合JPA命名规范的查询,JPA会自动帮我们完成查询语句的生成;另一种方式是我们自己实现JPQL(JPA支持的一种类SQL的查询)

CommonRepository.java:

package com.lhr.test.dao;import org.springframework.stereotype.Repository;import org.springframework.data.jpa.repository.JpaRepository;@NoRepositoryBeanpublic interface CommonRepository<T> extends JpaRepository<T,Long>{}

AuthorRepository.java:

package com.lhr.test.dao;import com.lhr.test.domain.Author;import java.util.List;import java.util.Optional;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.query.Param;public interface AuthorRepository extends CommonRepository<Author>{    public OptionalfindById(Long userId);    @Query("select au from com.lhr.test.domain.Author au where nick_name=:nickName")    public ListqueryByNickName(@Param("nickName") String nickName);}
AuthorController.java中增加接口:
@RequestMapping("query/{nickName}")    @ResponseBody    public List query(@PathVariable String nickName) {        return mAuthorService.queryByNickName(nickName);    }
AuthorService.java中增加接口:
    List queryByNickName(String nickName);
AuthorServiceImpl.java中实现接口增加下面代码:
  @Autowired    private AuthorRepository authorRepository;     @Override    public List queryByNickName(String nickName) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */        return authorRepository.queryByNickName(nickName);    }
此时,运行运行正常,我们用postman测试接口queryByNickName

69685d6a238d89da9ec85870be433be6.png

证明Spring Boot工程与JPA集成成功,连接数据库成功!

最后附上一张工程代码结构图:

271189af7c7cdaddbdbc314129758e40.png

04

与MyBatis集成

使用MyBatis来访问数据库,Spring Boot提供了stater来支持:

将下面依赖加入到工程的pom.xml文件中

  <dependency>        <groupId>org.mybatis.spring.bootgroupId>      <artifactId>mybatis-spring-boot-starterartifactId>      <version>1.1.1version> dependency>

MyBatis一般可以通过XML或者注解的方式来指定操作数据库的SQL,这里我们使用注解的方式。

增加一个AuthorMapper.java类:

package com.lhr.test.mapper;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Mapper;import com.lhr.test.domain.Author;@Mapperpublic interface AuthorMapper{    @Insert("insert into test(id,real_name,nick_name)values(#{id},#{realName},#{nickName})")    public Long insertAuthor(Author author);}

AuthorController.java中增加接口:

    @RequestMapping("insert")    @ResponseBody    public Long insert(@RequestBody Author author) {        return mAuthorService.insert(author);            }

AuthorService.java中增加接口:

   Long insert(Author author);

AuthorServiceImpl.java中实现这个接口:

 @Autowired    private AuthorMapper mAuthorMapper; @Override    public Long insert(Author author) {        /**@功能说明:         * @入参说明:         * @返回说明:         * @异常说明:         *         * @修改时间:         * @修改说明:         * ......         */       return mAuthorMapper.insertAuthor(author);    }

 此时,运行运行正常,我们用postman测试接口insert接口

8f9fe4ae419c5ced512b42351fb51ba3.png

查看数据库,增加了一条新记录:

0d587ff4bce83e1e67b5e6866db16f76.png

证明Spring Boot工程与MyBatis集成成功,连接数据库成功!

最后附上一张工程代码结构图:

ef07768509e79c1b0254a3586efbf583.png

另外,这种方式的延伸加强版就是使用MyBatisPlus,可以直接参考文章:搭建全流程的springboot代码架构(引入mybatis-plus)

04

结束语

到此,Spring Boot连接数据库的三种方式从代码到测试验证完全讲完了,代码都是我亲手敲出来的,按照文章讲述顺序来操作直接可以正常使用。若有问题欢迎下方留言或私信我,第一时间与您交流探讨!

此文章对应的SpringBoot工程源码:

https://github.com/danfengqingyi/SpringBootConnectDataBase.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值