天天看点

SpringBoot 入门案例之基础篇三

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 入门案例之基础篇三
关于 ​

​@SpringBootTest​

​ 注解
  • 名称:@SpringBootTest
  • 类型:测试类注解
  • 位置:测试类定义上方
  • 作用:设置JUnit加载的SpringBoot启动类
  • 范例:
@SpringBootTest
class Springboot04JunitApplicationTests {
}      
小结
  1. 导入测试对应的 starter(默认自带)
  2. 测试类使用​

    ​@SpringBootTest​

    ​ 修饰
  3. 使用自动装配的形式添加要测试的对象

整合JUnit - classes属性

SpringBoot 入门案例之基础篇三
  • 测试类不在 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 入门案例之基础篇三

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

SpringBoot 入门案例之基础篇三
  • 自动生成 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 入门案例之基础篇三
小结
  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 入门案例之基础篇三

SpringBoot 整合 MyBatisPlus

SpringBoot 入门案例之基础篇三

①:手动添加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 入门案例之基础篇三

①:导入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

@SpringBootTest
class Springboot07DruidApplicationTests {

    @Autowired
    private BookDao bookDao;

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

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