目录
在看基于SpringBoot的整合是如何做的之前,我们先看看Spring整合JUnit的⽅式,才能⽐对出来SpringBoot简化在了哪⾥。
- //加载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具
体的环境配置是在哪⾥写的,虽然每次加载的⽂件都有可能不同,这也是⼀个固定
格式.
- @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属性指定引导
类
SpringBoot默认的数据源对象是HiKari,我们可以自己指定⼀个数据源对象,例如:Druid。
mysql mysql-connector-java com.alibaba druid 1.2.11
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........");
- }
-
- }
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'
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 # 密码
启动类测试类同上。
org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.2 mysql mysql-connector-java runtime org.projectlombok lombok
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
Mybatis-Plus (简称MP)其实可以看作是对 Mybatis 的再⼀次封装,升级之后,对于单表的 CRUD 操作,调⽤ Mybatis-Plus 所提供的 API 就能够轻松实现,此外还提供了各种查询⽅式、分⻚等⾏为。最最重要的,开发⼈员还不⽤去编写 XML,这就⼤⼤降低了开发难度
org.projectlombok lombok com.baomidou mybatis-plus-boot-starter 3.5.2 mysql mysql-connector-java runtime
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
{ -
- }
核⼼在于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. 需要使⽤的第三⽅技术⽆法通过勾选确定时,需要⼿⼯添加坐标