SpringBoot 整合 JUnit

  • 添加​​Junit​​ 的起步依赖,它在 Spring Initializr 创建时会自动导入
<!--测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
  • SpringBoot 整合​​JUnit​
@SpringBootTest
class Springboot04JunitApplicationTests {

// 1、注入你要测试的对象
@Autowired
private BookDao bookDao;

@Test
void contextLoads() {
// 2、执行要测试的对象对应的方法
bookDao.save();
}

}

SpringBoot 入门案例之基础篇三_java

关于 ​​@SpringBootTest​​ 注解

  • 名称:@SpringBootTest
  • 类型:测试类注解
  • 位置:测试类定义上方
  • 作用:设置JUnit加载的SpringBoot启动类
  • 范例:
@SpringBootTest
class Springboot04JunitApplicationTests {
}

小结

  1. 导入测试对应的 starter(默认自带)
  2. 测试类使用​​@SpringBootTest​​ 修饰
  3. 使用自动装配的形式添加要测试的对象

整合JUnit - classes属性

SpringBoot 入门案例之基础篇三_druid_02

  • 测试类不在 SpringBoot启动类 的​​当前包及其子包下​​,可以采用下面两种方式来显式指定SpringBoot启动类
@SpringBootTest(classes = Springboot04JunitApplication.class)
class Springboot04JunitApplicationTests {

// 1、注入你要测试的对象
@Autowired
private BookDao bookDao;

@Test
void contextLoads() {
// 2、执行要测试的对象对应的方法
bookDao.save();
}

}
  • 或者用下面这个​​@ContextConfiguration​​ 注解也可以
@SpringBootTest
@ContextConfiguration(classes = Springboot04JunitApplication.class)
class Springboot04JunitApplicationTests {

// 1、注入你要测试的对象
@Autowired
private BookDao bookDao;

@Test
void contextLoads() {
// 2、执行要测试的对象对应的方法
bookDao.save();
}

}
  • 注意:如果测试类​​在SpringBoot启动类的当前包或子包中​​,可以省略启动类的设置,也就是可以省略 classes 的设定

小结

  1. 测试类如果存在于引导类所在包或子包中无需指定引导类
  2. 测试类如果不存在于引导类所在的包或子包中需要通过 classes 属性指定引导类

SpringBoot 整合 MyBatis

①:创建新模块,选择Spring初始化,并配置模块相关基础信息

SpringBoot 入门案例之基础篇三_spring容器_03

②:选择当前模块需要使用的技术集(MyBatis、MySQL)

SpringBoot 入门案例之基础篇三_mybatis-plus_04

  • 自动生成 mybatis 对应的依赖
<!--1.导入对应的starter-->
<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>

③:设置数据源参数

# 2.配置相关信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 283619

④:在数据库中创建 ​​tbl_book​​ 表

DROP TABLE IF EXISTS `tbl_book`;
CREATE TABLE `tbl_book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tbl_book
-- ----------------------------
INSERT INTO `tbl_book` VALUES (1, '计算机理论', 'Java编程思想(第4版)', 'Java学习经典,殿堂级著作!赢得了全球程序员的广泛赞誉。');
INSERT INTO `tbl_book` VALUES (2, '计算机理论', '计算机组成原理', '资深的计算机体系结构教育家Alan Clements博士编写,涵盖计算机系统的组成和体系结构的基本概念、指令系统以及处理器实现等涉及计算机组成原理课程的内容。');
INSERT INTO `tbl_book` VALUES (3, '程序设计', 'C++ Primer Plus 第6版 中文版', 'C++程序设计经典教程,畅销30年的C++大百科全书全新升级,经典C++入门教程十年新版再现');
INSERT INTO `tbl_book` VALUES (4, '程序设计', 'RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)', '畅销书升级,RocketMQ创始人高度评价,深入源码分析技术架构和实现原理,打造高性能、高可用、高吞吐量、低延迟RocketMQ');
INSERT INTO `tbl_book` VALUES (5, '程序设计', ' 深入理解Java虚拟机:JVM高级特性与实践(第3版)', '周志明虚拟机新作,第3版新增内容近50%,5个维度全面剖析JVM,大厂面试知识点全覆盖。与 Java编程思想、Effective Java、Java核心技术 堪称:Java四大名著');
INSERT INTO `tbl_book` VALUES (6, '历史', '见识城邦·人类简史:从动物到上帝(新版)', '以色列新锐历史学家尤瓦尔·赫拉利代表作,第十届文津图书奖获奖作品');
INSERT INTO `tbl_book` VALUES (7, '历史', '中国通史', '吕思勉先生写给普通读者的中国通史入门书,用白话文写成的中国通史,把历史从“帝王的家谱”转变为人类的进化史');
INSERT INTO `tbl_book` VALUES (8, '哲学', '理想国(柏拉图代表作)', '奠定西方哲学史的源流之作。2021新译本,以斯灵斯校勘本为底本,遵照“字对字”的原则,从古希腊原文直译,兼顾准确性和语言通顺性,助你读懂理想国。');
INSERT INTO `tbl_book` VALUES (9, '哲学', '苏格拉底的申辩', '《柏拉图注疏集:苏格拉底的申辩》记述的是公元前399年,一个叫莫勒图斯的年轻人在雅典状告哲学家苏格拉底,说他不信城邦诸神,引进新的精灵之事,败坏青年。 于是,苏格拉底被传讯,在500人组成的陪审团面前作了著名的申辩。');
INSERT INTO `tbl_book` VALUES (10, '文学', '鲁迅全集', '大师全集,完整收录,鲁迅毕生之心血尽归于此。\r\n\r\n  鲁迅是中国20世纪的文学家、思想家、革命家,中国近代文学巨匠。他早年留学于日本,后来弃医从文,他用笔耕不辍的文字为新一代青年们指引方向,在国内外思想文化领域有着极高的声誉。');
INSERT INTO `tbl_book` VALUES (11, '文学', '人间清醒', '茅盾文学奖获得者梁晓声2021全新力作');
INSERT INTO `tbl_book` VALUES (12, '经济', '八次危机:中国的真实经验1949-2009', '著名“三农”专家温铁军,用经济的独特视角,重新审视中国的1949-2009,历史给我了我们怎样的真实经验?');

SET FOREIGN_KEY_CHECKS = 1;

⑤:创建实体Bean

public class Book {

private Integer id;
private String type;
private String name;
private String 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;
}

@Override
public String toString() {
return "Book{" + "id=" + id + ", type='" + type + '\'' + ", name='" + name + '\'' + ", description='" + description + '\'' + '}';
}
}

⑥: 定义数据层接口与映射配置

@Mapper
public interface BookDao {

@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);

}

⑦:测试类中注入dao接口,测试功能

@SpringBootTest
class Springboot05MybatisApplicationTests {

@Autowired
private BookDao bookDao;

@Test
void contextLoads() {
System.out.println(bookDao.getById(1));
}

}

⑧:运行如下

SpringBoot 入门案例之基础篇三_druid_05

小结

  1. 勾选MyBatis技术,也就是导入MyBatis对应的starter
  2. 数据库连接相关信息转换成配置
  3. 数据库SQL映射需要添加@Mapper被容器识别到

SpringBoot 整合 MyBatis 常见问题处理

  • SpringBoot版本低于 2.4.3 (不含2.4.3),Mysql驱动版本大于8.0时,需要在url连接串中配置时区
jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
  • 或在 MySQL 数据库端配置时区解决此问题

小结

  1. MySQL 8.X驱动强制要求设置时区
  • 修改url,添加​​serverTimezone​​ 设定
  • 修改 MySQL 数据库配置(略)
  1. 驱动类过时,提醒更换为​​com.mysql.cj.jdbc.Driver​

SpringBoot 入门案例之基础篇三_java_06

SpringBoot 整合 MyBatisPlus

SpringBoot 入门案例之基础篇三_java_07

①:手动添加SpringBoot整合 ​​MyBatis-Plus​​​ 的坐标,可以通过 ​​mvnrepository​​ 获取

<!--1.导入对应的starter-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
  • 注意事项: 由于 SpringBoot 中未收录 MyBatis-Plus 的坐标版本,需要指定对应的​​Version​

②:设置数据源参数

# 2.配置相关信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: 283619

③:创建实体类同SpringBoot整合 MyBatis

④:定义数据层接口与映射配置,继承 ​​BaseMapper<T>​​ 接口

@Mapper
public interface BookDao extends BaseMapper<Book> {

}

⑤:测试类中注入dao接口,测试功能

@SpringBootTest
class Springboot06MybatisPlusApplicationTests {

@Autowired
private BookDao bookDao;

@Test
void contextLoads() {
System.out.println(bookDao.selectById(2));
}

@Test
void testGetAll() {
System.out.println(bookDao.selectList(null));
}
}

注意: 如果你的数据库表有前缀要在 application.yml 添加如下配制

# 设置 MyBatis-Plus 相关的配置
mybatis-plus:
global-config:
db-config:
table-prefix:

小结

  1. 手工添加MyBatis-Plus对应的starter
  2. 数据层接口使用BaseMapper简化开发
  3. 需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标

SpringBoot整合 Druid

SpringBoot 入门案例之基础篇三_spring容器_08

①:导入Druid对应的starter

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>

②:指定数据源类型 (这种方式只需导入一个 Druid 的坐标)

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: 283619
type:
  • 或者 变更 Druid 的配置方式(推荐用下面这种方式)
  • 这种方式需要导入 Druid 对应的 starter
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: 283619

③:其他同SpringBoot整合MyBatis

④:测试类中注入dao接口,测试功能

@SpringBootTest
class Springboot07DruidApplicationTests {

@Autowired
private BookDao bookDao;

@Test
void contextLoads() {
System.out.println(bookDao.getById(3));
}

}

小结

  1. 整合Druid需要导入Druid对应的 starter
  2. 根据Druid提供的配置方式进行配置
  3. 整合第三方技术通用方式
  • 导入对应的 starter
  • 根据提供的配置格式,配置非默认值对应的配置项