• 3.SpringBoot整合持久层技术


    目录

    3.1 SpringBoot整合junit

    spring方式

     SpringBoot方式

    ⼿⼯指定引导类

     3.2 整合Druid数据源

    使用原始的 Druid

    1. 导⼊对应的技术坐标、

    2. yml配置使⽤指定的数据源类型

     使用druid-spring-boot-starter

    1. 导⼊对应的技术坐标

    2. yml配置使⽤指定的数据源类型

     

     3.3 springBoot整合Mybatis

    1.创建模块(工程)Spring Initializr

    2.添加依赖

    3.yml配置数据源相关信息 

    3.4 整合MybaitsPlus 

    1.导⼊对应的starter 

     2.yml配置数据源相关信息


    3.1 SpringBoot整合junit

    在看基于SpringBoot的整合是如何做的之前,我们先看看Spring整合JUnit的⽅式,才能⽐对出来SpringBoot简化在了哪⾥。

    spring方式

    1. //加载spring整合junit专⽤的类运⾏器
    2. @RunWith(SpringJUnit4ClassRunner.class)
    3. //指定对应的配置信息
    4. @ContextConfiguration(classes = Demo4SpringBoot.class)
    5. public class UserServiceTestCase {
    6. //注⼊你要测试的对象
    7. @Autowired
    8. private UserService userService;
    9. @Test
    10. public void addUser(){
    11. //执⾏要测试的对象对应的⽅法
    12. System.out.println(userService.findUserById(2));
    13. }
    14. }

    @RunWith是使⽤spring的独⽴运⾏的⽅式运⾏程序,⽽不再使⽤junit的⽅式。是⼀
    种固定的写法;

    @ContextConfiguration是⽤来设置Spring核⼼配置⽂件或配置类的,告诉Spring具
    体的环境配置是在哪⾥写的,虽然每次加载的⽂件都有可能不同,这也是⼀个固定
    格式.

     SpringBoot方式

    1. @SpringBootTest
    2. class Demo2SpringbootApplicationTests {
    3. //注入测试对象
    4. @Autowired
    5. private UserDao userDao;
    6. @Test
    7. void contextLoads() {
    8. //执行要测试的方法
    9. userDao.testUser();
    10. System.out.println("test........");
    11. }
    12. }

    使⽤⼀个注解@SpringBootTest替换了前⾯两个注解。 

    ⼿⼯指定引导类

    有两种⽅式,第⼀种⽅式使⽤属性的形式进⾏,在注解@SpringBootTest中添加classes属性指定配置类

    1. @SpringBootTest(classes = Demo2SpringbootApplication.class)//⼿⼯指定引导类
    2. class Demo2SpringbootApplicationTests {
    3. //注入测试对象
    4. @Autowired
    5. private UserDao userDao;
    6. @Test
    7. void contextLoads() {
    8. //执行要测试的方法
    9. userDao.testUser();
    10. System.out.println("test........");
    11. }
    12. }

    第⼆种⽅式回归原始配置⽅式,仍然使⽤@ContextConfiguration注解进⾏,效果是⼀样的 

    1. @SpringBootTest
    2. @ContextConfiguration(classes = Demo2SpringbootApplication.class)//⼿⼯指定引导类
    3. class Demo2SpringbootApplicationTests {
    4. //注入测试对象
    5. @Autowired
    6. private UserDao userDao;
    7. @Test
    8. void contextLoads() {
    9. //执行要测试的方法
    10. userDao.testUser();
    11. System.out.println("test........");
    12. }
    13. }

     总结
    1. 导⼊测试对应的starter
    2. 测试类使⽤@SpringBootTest修饰
    3. 使⽤⾃动装配的形式添加要测试的对象
    4. 测试类如果存在于引导类所在包或⼦包中⽆需指定引导类
    5. 测试类如果不存在于引导类所在的包或⼦包中需要通过classes属性指定引导

     3.2 整合Druid数据源

    SpringBoot默认的数据源对象是HiKari,我们可以自己指定⼀个数据源对象,例如:Druid。

    使用原始的 Druid

    1. 导⼊对应的技术坐标、

    
        mysql
        mysql-connector-java
    
    
        com.alibaba
        druid
        1.2.11
    

    2. yml配置使⽤指定的数据源类型

    spring:
            # 数据源配置
            datasource:      
                            driver-class-name: com.mysql.cj.jdbc.Driver
                            url: jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai#数据源地址
                            username: root # ⽤户名
                            password: root # 密码

                            type: com.alibaba.druid.pool.DruidDataSource #type属性,专⽤于指定数据源类型

    在引导类

    1. @SpringBootApplication
    2. public class Demo2SpringbootApplication {
    3. @Autowired
    4. private Environment environment;
    5. @Bean
    6. public DataSource getDataSource(){
    7. DruidDataSource dataSource=new DruidDataSource();
    8. dataSource.setUrl(environment.getProperty("spring.datasource.url"));
    9. dataSource.setUsername(environment.getProperty("spring.datasource.username"));
    10. dataSource.setPassword(environment.getProperty("spring.datasource.password"));
    11. dataSource.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));
    12. return dataSource;
    13. }
    14. public static void main(String[] args) {
    15. SpringApplication.run(Demo2SpringbootApplication.class, args);
    16. }
    17. }

    测试:

    1. @SpringBootTest
    2. class Demo2SpringbootApplicationTests {
    3. //注入测试对象
    4. @Autowired
    5. private DruidDataSource dataSource;
    6. @Test
    7. void contextLoads() {
    8. //执行要测试的方法
    9. System.out.println(dataSource.getUrl());
    10. System.out.println(dataSource.getUsername());
    11. System.out.println(dataSource.getPassword());
    12. System.out.println(dataSource.getDriverClassName());
    13. System.out.println("test........");
    14. }
    15. }

     使用druid-spring-boot-starter

    1. 导⼊对应的技术坐标

    
        mysql
        mysql-connector-java
    
    
        com.alibaba
        druid-spring-boot-starter
        1.2.11
    
    
        org.springframework.boot
        spring-boot-starter-jdbc
    

    如果没有引入spring-boot-starter-jdbc则会报错:Error creating bean with name 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'

    2. yml配置使⽤指定的数据源类型

    spring:
        datasource:
                driver-class-name: com.mysql.cj.jdbc.Driver
                url: jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai#数据源地址
                username: root # ⽤户名
                password: root # 密码

     启动类测试类同上。

     3.3 springBoot整合Mybatis

    1.创建模块(工程)Spring Initializr

    2.添加依赖

    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.2.2
    
    
    
        mysql
        mysql-connector-java
        runtime
    
    
        org.projectlombok
        lombok
    

    3.yml配置数据源相关信息 

    spring:
      datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai #数据源地址
          username: root # ⽤户名
          password: root # 密码

    创建pojo

    1. @Data
    2. public class User {
    3. private Integer user_id;
    4. private String user_name;
    5. private String user_password;
    6. }

    创建dao

    1. @Mapper
    2. public interface UserDao {
    3. //根据id查询user
    4. @Select("select * from users where user_id = #{id}")
    5. public User getById(Integer id);
    6. }

    测试:

    1. @SpringBootTest
    2. class Demo3SpringbootMybatisApplicationTests {
    3. @Autowired
    4. private UserDao userDao;
    5. @Test
    6. void contextLoads() {
    7. User user = userDao.getById(4);
    8. System.out.println(user);
    9. }
    10. }

     注意事项
    使⽤SpringBoot2.4.3(不含)之前版本会出现⼀个⼩BUG,就是MySQL驱动升级到8以后要求强制配置时区,如果不设置会出问题。解决⽅案很简单,驱动url上⾯添加上对应设置就⾏了

    总结
    1. 整合操作需要勾选MyBatis技术,也就是导⼊MyBatis对应的starter
    2. 数据库连接相关信息转换成配置
    3. 数据库SQL映射需要添加@Mapper被容器识别到
    4. MySQL 8.X驱动强制要求设置时区
    修改url,添加serverTimezone设定
    修改MySQL数据库配置
    5. 驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver 

    3.4 整合MybaitsPlus 

    Mybatis-Plus (简称MP)其实可以看作是对 Mybatis 的再⼀次封装,升级之后,对于单表的 CRUD 操作,调⽤ Mybatis-Plus 所提供的 API 就能够轻松实现,此外还提供了各种查询⽅式、分⻚等⾏为。最最重要的,开发⼈员还不⽤去编写 XML,这就⼤⼤降低了开发难度

    1.导⼊对应的starter 

    
        org.projectlombok
        lombok
    
    
    
    
        com.baomidou
        mybatis-plus-boot-starter
        3.5.2
    
    
    
        mysql
        mysql-connector-java
        runtime
    

     2.yml配置数据源相关信息

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai #数据源地址
        username: root # ⽤户名
        password:  # 密码
    #配置SQL输出语句
    mybatis-plus:
        configuration:
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    修改UserDao 

    1. @Mapper
    2. public interface UserDao extends BaseMapper {
    3. }

    核⼼在于Dao接⼝继承了⼀个BaseMapper的接⼝,这个接⼝中帮助开发者预定了若⼲个常⽤的API接⼝,简化了通⽤API接⼝的开发⼯作。

    修改User与表映射

    1. @Data
    2. @TableName("users")
    3. public class User {
    4. //这个用于主键上的注解,mybatis-plus默认注解是id
    5. //type = IdType.AUTO 这个是自动,但是数据库中需要自增
    6. //@TableId(value = "emp_id",type =IdType.ASSIGN_ID ) 这个是mybatis-plus利用雪花算法,产生主键
    7. // INPUT insert 前自行 set 主键值
    8. @TableId(value = "user_id",type = IdType.AUTO)
    9. private Integer user_id;
    10. @TableField("user_name")
    11. private String user_name;
    12. @TableField("user_password")
    13. private String password;
    14. }

    测试:

    1. @SpringBootTest
    2. class Demo4SpringbootMybatisplusApplicationTests {
    3. @Autowired
    4. private UserDao userDao;
    5. @Test
    6. void contextLoads() {
    7. User user = userDao.selectById(6);
    8. System.out.println(user);
    9. }
    10. }

     

    总结
    1. ⼿⼯添加MyBatis-Plus对应的starter
    2. 数据层接⼝使⽤BaseMapper简化开发
    3. 需要使⽤的第三⽅技术⽆法通过勾选确定时,需要⼿⼯添加坐标

  • 相关阅读:
    小美的排列构造
    多终端云同步文献管理:Zotero+TeraCloud(Windows+Android)
    解锁机器学习-梯度下降:从技术到实战的全面指南
    Linux redict 输入输出重定向 详细使用方法 文件描述符
    身份证读卡器ubuntu虚拟机实现RK3399 Arm Linux开发板交叉编译libdonsee.so找不到libusb解决办法
    java-php-python-ssm学术会议信息网站计算机毕业设计
    HTML+CSS+JS制作一个迅雷看看电影网页设计实例 ,排版整洁,内容丰富,主题鲜明,简单的网页制作期末作业
    《最新出炉》系列入门篇-Python+Playwright自动化测试-42-强大的可视化追踪利器Trace Viewer
    【测试开发】node.js下使用 puppeteer 构建截图方案(2/2)
    安卓毕业设计选题app毕业论文基于Uniapp实现的Android的餐饮管理系统
  • 原文地址:https://blog.csdn.net/m0_62520968/article/details/126661496