经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
SpringBoot3数据库集成
来源:cnblogs  作者:知了一笑  时间:2023/8/14 8:52:12  对本文有异议

标签:Jdbc.Druid.Mybatis.Plus;

一、简介

项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富;

通过如下几个组件来实现数据库的整合;

Druid连接池:阿里开源的数据库连接池,并且提供SQL执行的监控能力;

MybatisPlus框架:基于Mybatis框架的增强工具包,可以用于简化持久层开发,显著的提高效率;

MySQL数据库:常用的关系型数据库组件,在案例中使用Druid组件来连接数据库;

二、工程搭建

1、工程结构

2、依赖管理

Druid连接池使用的是1.2.18版本;在mybatis-plus组件中依赖mybatis框架的3.5.10版本;MySQL本地环境是5.7版本,这里依赖包使用8.0.19版本;

  1. <!-- MySql数据库 -->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>${mysql.version}</version>
  6. </dependency>
  7. <!-- Druid组件 -->
  8. <dependency>
  9. <groupId>com.alibaba</groupId>
  10. <artifactId>druid-spring-boot-3-starter</artifactId>
  11. <version>${druid-spring-boot.version}</version>
  12. </dependency>
  13. <!-- JDBC依赖 -->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-jdbc</artifactId>
  17. <version>${spring-boot.version}</version>
  18. </dependency>
  19. <!-- MybatisPlus组件 -->
  20. <dependency>
  21. <groupId>com.baomidou</groupId>
  22. <artifactId>mybatis-plus-boot-starter</artifactId>
  23. <version>${mybatis-plus.version}</version>
  24. </dependency>

三、Druid连接池

1、配置文件

有关于Druid连接池的可配置参数还有很多,可以参考源码中的描述或者官方案例,此处只提供部分常见的参数配置;

  1. spring:
  2. datasource:
  3. type: com.alibaba.druid.pool.DruidDataSource
  4. druid:
  5. # 数据库
  6. url: jdbc:mysql://localhost:3306/boot-jdbc
  7. username: root
  8. password: 123456
  9. driver-class-name: com.mysql.cj.jdbc.Driver
  10. # 连接池-初始化大小
  11. initial-size: 10
  12. # 连接池-最大连接数
  13. max-active: 100
  14. # 最大等待时间
  15. max-wait: 60000
  16. # 连接池-最小空闲数
  17. min-idle: 10
  18. # 检测空闲连接
  19. test-while-idle: true
  20. # 最小空闲时间
  21. min-evictable-idle-time-millis: 300000

1.2 配置类

配置两个Bean对象,分别DruidDataSource类和JdbcTemplate类;

  1. @Configuration
  2. public class DruidConfig {
  3. @Bean("dataSource")
  4. @ConfigurationProperties(prefix = "spring.datasource.druid")
  5. public DruidDataSource dataSource() {
  6. return new DruidDataSource();
  7. }
  8. @Bean("jdbcTemplate")
  9. public JdbcTemplate jdbcTemplate() {
  10. return new JdbcTemplate(dataSource());
  11. }
  12. }

四、JDBC操作

1、数据库表

boot-jdbc数据库中添加两张测试表,用户基础信息tb_user表和用户扩展信息tb_user_extd表,脚本文件在工程的resources/sql-script目录下;

  1. CREATE TABLE `tb_user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  3. `user_name` varchar(30) NOT NULL COMMENT '用户名称',
  4. `email` varchar(50) DEFAULT NULL COMMENT '邮件',
  5. `phone` varchar(20) NOT NULL COMMENT '手机号',
  6. `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  7. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  8. `state` int(1) DEFAULT '1' COMMENT '状态:1启用,2删除',
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户基础信息';
  11. CREATE TABLE `tb_user_extd` (
  12. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  13. `user_id` int(11) NOT NULL COMMENT '用户ID',
  14. `city_name` varchar(50) DEFAULT NULL COMMENT '城市名称',
  15. `school` varchar(200) DEFAULT NULL COMMENT '学校名称',
  16. PRIMARY KEY (`id`),
  17. KEY `user_id_index` (`user_id`)
  18. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户扩展信息';

2、JdbcTemplate

JdbcTemplate是由spring-jdbc组件提供,支持DataSource的注册,是对数据库操作的深层封装,支持一系列数据操作方法;

  1. @Service
  2. public class JdbcService {
  3. private static final Logger logger = LoggerFactory.getLogger(JdbcService.class);
  4. @Resource
  5. private JdbcTemplate jdbcTemplate ;
  6. /**
  7. * 添加数据
  8. */
  9. public int addData (User user){
  10. return jdbcTemplate.update(
  11. "INSERT INTO `tb_user` (`user_name`, `email`, `phone`, `create_time`, `update_time`) VALUES (?, ?, ?, ?, ?)",
  12. user.getUserName(),user.getEmail(),user.getPhone(),user.getCreateTime(),user.getUpdateTime());
  13. }
  14. /**
  15. * 查询全部
  16. */
  17. public List<User> queryAll (){
  18. return jdbcTemplate.query("SELECT * FROM tb_user WHERE state=1",new BeanPropertyRowMapper<>(User.class));
  19. }
  20. /**
  21. * 修改字段
  22. */
  23. public int updateName (Integer id,String name){
  24. return jdbcTemplate.update("UPDATE `tb_user` SET `user_name` = ? WHERE `id` = ?",name,id);
  25. }
  26. /**
  27. * 主键删除
  28. */
  29. public int deleteId (Integer id){
  30. return jdbcTemplate.update("DELETE FROM `tb_user` WHERE `id` = ?",id);
  31. }
  32. }

五、MybatisPlus框架

1、配置管理

1.1 配置类

在配置类中,添加MapperScan注解用来扫描和注册MyBatis框架的mapper接口,以及设置PaginationInnerInterceptor分页拦截器;

  1. @Configuration
  2. @MapperScan("com.boot.jdbc.mapper")
  3. public class MybatisConfig {
  4. /**
  5. * 分页
  6. */
  7. @Bean
  8. public MybatisPlusInterceptor paginationInterceptor() {
  9. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  10. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  11. return interceptor;
  12. }
  13. }

1.2 配置文件

在日志中输出mybatis框架解析的SQL语句,方便在测试的时候快速发现问题;

  1. mybatis-plus:
  2. configuration:
  3. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2、Mapper

Mapper接口编写数据库操作方法,Mapper.xml文件中定义数据库执行的SQL语句,在mybatis-plus组件中提供很多单表操作的默认方法实现,也可以自定义方法;

2.1 Mapper接口

  1. public interface UserMapper extends BaseMapper<User> {
  2. /**
  3. * 自定义分页
  4. */
  5. IPage<UserModel> queryUserPage(@Param("page") IPage<User> page);
  6. }

2.2 Mapper文件

  1. <mapper namespace="com.boot.jdbc.mapper.UserMapper">
  2. <select id="queryUserPage" resultType="com.boot.jdbc.entity.UserModel">
  3. SELECT
  4. tb1.id userId,
  5. tb1.user_name userName,
  6. tb1.email,
  7. tb1.phone,
  8. tb1.create_time createTime,
  9. tb1.update_time updateTime,
  10. tb1.state,
  11. tb2.school,
  12. tb2.city_name cityName
  13. FROM tb_user tb1
  14. LEFT JOIN tb_user_extd tb2 ON tb1.id = tb2.user_id
  15. WHERE tb1.state='1'
  16. ORDER BY tb1.id DESC
  17. </select>
  18. </mapper>

3、单元测试

编写UserMapper接口测试,很多默认实现的方法参考BaseMapper接口即可,或者参考IService接口和ServiceImpl实现类,提供了更加丰富的扩展方法;

  1. public class UserMapperTest {
  2. @Resource
  3. private UserMapper userMapper ;
  4. @Test
  5. public void testInsert (){
  6. List<User> userBatch = Arrays.asList(
  7. new User(null,"Zhang三","Zhang@qq.com","18623459687",new Date(),new Date(),1));
  8. userBatch.forEach(userMapper::insert);
  9. }
  10. @Test
  11. public void testUpdate (){
  12. User user = userMapper.selectById(1);
  13. user.setState(2);
  14. userMapper.updateById(user);
  15. }
  16. @Test
  17. public void testDelete (){
  18. userMapper.deleteById(7);
  19. }
  20. @Test
  21. public void testQuery (){
  22. List<User> userColumnsList = new LambdaQueryChainWrapper<>(userMapper)
  23. .select(User::getUserName,User::getPhone,User::getEmail)
  24. .like(User::getPhone,"189").orderByDesc(User::getId).last("limit 2").list();
  25. userColumnsList.forEach(System.out::println);
  26. }
  27. @Test
  28. public void testPage (){
  29. // 1、默认分页查询
  30. IPage<User> userPage = new Page<>(2,2) ;
  31. IPage<User> userPageList = userMapper.selectPage(userPage,new QueryWrapper<>());
  32. userPageList.getRecords().forEach(System.out::println);
  33. // 2、自定义查询分页
  34. IPage<UserModel> userModelPage = userMapper.queryUserPage(userPage);
  35. userModelPage.getRecords().forEach(System.out::println);
  36. }
  37. }

六、参考源码

  1. 文档仓库:
  2. https://gitee.com/cicadasmile/butte-java-note
  3. 源码仓库:
  4. https://gitee.com/cicadasmile/butte-spring-parent

原文链接:https://www.cnblogs.com/cicada-smile/p/17624936.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号