目录
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. 需要使⽤的第三⽅技术⽆法通过勾选确定时,需要⼿⼯添加坐标