目录
整合JUnit
准备工作
BookDao:
public interface BookDao {
public void save();
}
BookDaoImpl:
@Repository
public class BookDaoImpl implements BookDao {
@Override
public void save() {
System.out.println("book dao is running ...");
}
}
测试类:
@SpringBootTest
class Springboot04JunitApplicationTests {
//1. 注入你要测试的对象
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
//2.执行要测试的对象对应的方法
bookDao.save();
}
}
SpringBoot整合整合JUnit主要的核心就是@SpringBootTest,对于这个注解所添加的位置是在测试类的上方,有了这个注解就可以完成测试工作。
1.导入测试对应的starter
这个创建工程时自动就有了,如果要用纯手工的方式去做一个boot工程的话,不要忘记导入这个坐标。
2.测试类使用@SpringBootTest修饰
3.使用自动装配的形式添加要测试的对象
如果测试类和引导类所在包的包名不同的话,则会报错。此时只需要在测试类中的@SpringBootTest注解中添加引导类的类名即可。(其实就是测试类找不到引导类了)
@SpringBootTest(classes = Springboot04JunitApplication.class)
class Springboot04JunitApplicationTests {
//1. 注入你要测试的对象
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
//2.执行要测试的对象对应的方法
bookDao.save();
}
}
Spring结合JUnit的时候其实有两个设定,第一个设定叫做@RunWith设置运行器,第二个叫做@ContextConfiguration,跟你对应的配置文件或者配置类是哪一个,说白了是我们的测试的整个工作其实取的这种被测试的对象是在Spring容器中的,此时就需要拿到Spring容器,如果没有按照要求将测试类放在包下则拿不到这个容器,因此需要告诉他配置类或者配置文件在哪里,我们加的@SpringBootTest(classes = Springboot04JunitApplication.class)其实就是在指明他的配置类。
Springboot会从测试类所在的包,里面有没有哪个类加载了@SpringBootConfiguration,所以在这个时候如果没找到就会报错。(@SpringBootApplication里包含@SpringBootConfiguration)
使用clasess属性加载指定的配置类,如果不指定就会在测试类所在的包或者是父包当中去找,看谁携带这个注解。
测试类如果存在于引导类所在包或子包中无需指定引导类。
测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类。
整合MyBatis
导入对应的starter
配置相关信息
# 应用名称
spring.application.name=springboot_05_mybatis
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.zqf.springboot_05_mybatis.mybatis.entity
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=mybatis
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=123456
Book:
package com.zqf.domain;
public class Book {
private Integer id;
private String type;
private String name;
private String description;
@Override
public String toString() {
return "Book{" +
"id=" + id +
", type='" + type + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
BookDao:
package com.zqf.dao;
import com.zqf.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
1.勾选MyBatis技术,也就是导入MyBatis对应的starter
2.数据库连接相关信息转换成配置
3.数据库SQL映射需要添加@Mapper被容器识别到
整合MyBatis-Plus
在BookDao接口当中继承BaseMapper<Book>即可,mybatisplus的使用:MyBatis-Plus整合
测试类:
@SpringBootTest
class Springboot06MybatisPlusApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
System.out.println(bookDao.selectById(2));
}
}
直接测试会产生报错信息说数据库表不存在
此时需要mp的相关配置
整合Druid
1. 导入德鲁伊连接池坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring- boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
2. 配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
这种配置不是整合型的配置方法,还有一种配置方法:
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456