SpringBoot 入门案例之基础篇三

SpringBoot 整合 JUnit

  • 添加 Junit 的起步依赖,它在 Spring Initializr 创建时会自动导入

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-testartifactId>
    <scope>testscope>
dependency>
  • SpringBoot 整合 JUnit
@SpringBootTest
class Springboot04JunitApplicationTests {

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

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

}

SpringBoot 入门案例之基础篇三_第1张图片

关于 @SpringBootTest 注解

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

小结

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

整合JUnit - classes属性

SpringBoot 入门案例之基础篇三_第2张图片

  • 测试类不在 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 入门案例之基础篇三_第3张图片

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

SpringBoot 入门案例之基础篇三_第4张图片

  • 自动生成 mybatis 对应的依赖
				
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.2.2version>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        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 入门案例之基础篇三_第5张图片

小结

  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 入门案例之基础篇三_第6张图片

SpringBoot 整合 MyBatisPlus

SpringBoot 入门案例之基础篇三_第7张图片

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

				
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.5.1version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        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 接口

@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: tbl_

小结

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

SpringBoot整合 Druid

SpringBoot 入门案例之基础篇三_第8张图片

①:导入Druid对应的starter

				<dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.2.8version>
        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: com.alibaba.druid.pool.DruidDataSource
  • 或者 变更 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
  • 根据提供的配置格式,配置非默认值对应的配置项

你可能感兴趣的:(SpringBoot,学习笔记,spring,boot,spring容器,java,mybatis-plus,druid)