“ 对于后端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;
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.DruidDataSource3、建立与数据库对应的POJO类
这里为了简化代码省去POJO类中get、set、toString方法,使用注解@Data,需要引入lombok依赖库
<dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <optional>trueoptional>dependency>
02
—
方式一:与jdbcTemplate集成
使用jdbcTemplate来访问数据库,Spring Boot提供了stater来支持:
将下面依赖加入到工程的pom.xml文件中
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-jdbcartifactId>dependency>定义Dao接口类:

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

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

证明Spring Boot工程与jdbcTemplate集成成功,连接数据库成功!
最后附上一张工程代码结构图:

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无关,代码如下,红框部分是增加项:

需要继承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
证明Spring Boot工程与JPA集成成功,连接数据库成功!
最后附上一张工程代码结构图:

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接口

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

证明Spring Boot工程与MyBatis集成成功,连接数据库成功!
最后附上一张工程代码结构图:

另外,这种方式的延伸加强版就是使用MyBatisPlus,可以直接参考文章:搭建全流程的springboot代码架构(引入mybatis-plus)
04
—
结束语
到此,Spring Boot连接数据库的三种方式从代码到测试验证完全讲完了,代码都是我亲手敲出来的,按照文章讲述顺序来操作直接可以正常使用。若有问题欢迎下方留言或私信我,第一时间与您交流探讨!
此文章对应的SpringBoot工程源码:
https://github.com/danfengqingyi/SpringBootConnectDataBase.git
本文详细介绍了Spring Boot连接数据库的三种方式:1) 使用jdbcTemplate,通过添加依赖、定义Dao接口及实现类、Controller类等实现数据交互;2) 结合JPA,通过添加Entity注解、继承JpaRepository实现自动化的数据库操作;3) 集成MyBatis,配置依赖并编写Mapper接口和实现类进行数据库操作。每种方式都通过Postman测试并验证了数据库连接的成功。

562

被折叠的 条评论
为什么被折叠?



