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方式

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

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

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

 SpringBoot方式

@SpringBootTest
class Demo2SpringbootApplicationTests {

    //注入测试对象
    @Autowired
    private UserDao userDao;
    @Test
    void contextLoads() {
        //执行要测试的方法
        userDao.testUser();
        System.out.println("test........");
    }

}

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

⼿⼯指定引导类

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

@SpringBootTest(classes = Demo2SpringbootApplication.class)//⼿⼯指定引导类
class Demo2SpringbootApplicationTests {

    //注入测试对象
    @Autowired
    private UserDao userDao;
    @Test
    void contextLoads() {
        //执行要测试的方法
        userDao.testUser();
        System.out.println("test........");
    }

}

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

@SpringBootTest
@ContextConfiguration(classes = Demo2SpringbootApplication.class)//⼿⼯指定引导类
class Demo2SpringbootApplicationTests {

    //注入测试对象
    @Autowired
    private UserDao userDao;
    @Test
    void contextLoads() {
        //执行要测试的方法
        userDao.testUser();
        System.out.println("test........");
    }

}

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

 3.2 整合Druid数据源

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

使用原始的 Druid

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

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.11</version>
</dependency>

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属性,专⽤于指定数据源类型

在引导类

@SpringBootApplication
public class Demo2SpringbootApplication {

    @Autowired
    private Environment environment;

    @Bean
    public DataSource getDataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setUrl(environment.getProperty("spring.datasource.url"));
        dataSource.setUsername(environment.getProperty("spring.datasource.username"));
        dataSource.setPassword(environment.getProperty("spring.datasource.password"));
        dataSource.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));
        return dataSource;
    }

    public static void main(String[] args) {
        SpringApplication.run(Demo2SpringbootApplication.class, args);
    }

}

测试:

@SpringBootTest
class Demo2SpringbootApplicationTests {

    //注入测试对象

    @Autowired
    private DruidDataSource dataSource;

    @Test
    void contextLoads() {
        //执行要测试的方法
        System.out.println(dataSource.getUrl());
        System.out.println(dataSource.getUsername());
        System.out.println(dataSource.getPassword());
        System.out.println(dataSource.getDriverClassName());
        System.out.println("test........");
    }

}

 使用druid-spring-boot-starter

1. 导⼊对应的技术坐标

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

如果没有引入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.添加依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

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

@Data
public class User {

    private Integer user_id;
    private String user_name;
    private String user_password;

}

创建dao

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

测试:

@SpringBootTest
class Demo3SpringbootMybatisApplicationTests {

    @Autowired
    private UserDao userDao;

    @Test
    void contextLoads() {
        User user = userDao.getById(4);
        System.out.println(user);
    }

}

 注意事项
使⽤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 

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 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 

@Mapper
public interface UserDao extends BaseMapper<User> {

}

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

修改User与表映射

@Data
@TableName("users")
public class User {

    //这个用于主键上的注解,mybatis-plus默认注解是id
    //type = IdType.AUTO 这个是自动,但是数据库中需要自增
    //@TableId(value = "emp_id",type =IdType.ASSIGN_ID ) 这个是mybatis-plus利用雪花算法,产生主键
    // INPUT   insert 前自行 set 主键值
    @TableId(value = "user_id",type = IdType.AUTO)
    private Integer user_id;
    @TableField("user_name")
    private String user_name;
    @TableField("user_password")
    private String password;

}

测试:

@SpringBootTest
class Demo4SpringbootMybatisplusApplicationTests {

    @Autowired
    private UserDao userDao;

    @Test
    void contextLoads() {
        User user = userDao.selectById(6);
        System.out.println(user);
    }

}

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值