SpringBoot整合Junit与Mybatis实战

SpringBoot整合Junit与Mybatis实战

前言:前面我们学习完了SpringBoot的相关基础知识,以及多环境配置等等,下面我们基于SpringBoot,如何提高开发的效率,注重于代码的业务逻辑,整合Junit和Mybatis。整合就是把复杂的技术细节封装起来,让我们能专注于业务本身。就像我们不需要懂发动机原理也能开车一样。

整合Junit:

实际上我们仅仅是创建了一个SpringBoot项目,然后在测试类中测试。这样看起来似乎没有整合,正所谓“没有所谓的岁月静好,只是有人在为你负重前行”为我们负重前行的实际上是SpringBoot的自动配置功能。

spring-boot-starter-test

当我们创建 Spring Boot 项目时(无论是通过 start.spring.io 还是 IDEA 的 Spring Initializr),pom.xml 中会自动添加这个依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>

这个start里面包含了什么:

<!-- spring-boot-starter-test 内部包含了: --> <dependencies> <!-- 1. JUnit 5 (Jupiter) - 测试框架本身 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> </dependency> <!-- 2. Spring 测试支持 - 让JUnit能和Spring整合 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <!-- 3. Spring Boot 测试支持 - @SpringBootTest等注解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <!-- 4. Mockito - 模拟对象 --> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> </dependency> <!-- 5. AssertJ - 流畅断言 --> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> </dependency> <!-- 还有其他测试工具... --> </dependencies>

简单理解:

spring-boot-starter-test就相当于一个火锅全家桶,里面包含了所有的配料,菜,锅,我们只需要使用即可,而不需要手动的去下载安装这些配置。

创建SpringBoot的实际过程:

1.我们先创建一个项目,选择Spring Initializr,选择依赖

2.IDEA在背后,在pom文件中自动的添加对应的依赖配置,自动添加测试的starter,还自动生成测试目录和示例测试类。

关于这个自动生成的配置类:

@SpringBootTest // 这已经是Spring整合JUnit的注解了 class ApplicationTests { // 自动生成 @Test // JUnit 5的注解 void contextLoads() { // 一个简单的测试方法 // 测试Spring容器能否启动}}

首先区分:

维度Application(主启动类)ApplicationTest(测试类)
角色项目启动入口测试入口
运行目的启动整个应用,对外提供服务验证代码是否正确
运行时机开发/生产环境运行只在测试时运行
生命周期长期运行(直到手动停止)短暂运行(几秒钟)
端口占用占用端口(如8080)不占用端口(或随机端口)
是否必须每个Spring Boot项目必须有一个可选,但建议有

@SpringBootTest的源码:

@SpringBootTest 的源码(简化版) @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @BootstrapWith(SpringBootTestContextBootstrapper.class) public @interface SpringBootTest { }

那我们为什么不用在测试类中写注解@Configuration配置类呢。

实际工作流程:

1. 你只写了这一行
@SpringBootTest
class UserServiceTest {
    @Autowired UserService userService;
}

 2. Spring 测试框架会这样做:
 扫描当前测试类所在的包及其子包
 查找 @SpringBootApplication 注解的类
加载这个类的配置(相当于执行了 SpringApplication.run())

 3. 找到了你的主启动类
@SpringBootApplication  // 这里包含了 @Configuration
public class Application {  public static void main(String[] args) SpringApplication.run(Application.class, args);    }}

4. 于是测试类就能使用主启动类的所有配置了

注意事项
如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定,如果不在这两者之间,我们可以手动的添加,

SpringBoot整合Mybatis:

1.重新创建一个项目,在创建的时候要选择对应的技术集:

2.在yml文件中设置数据源 :

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

3.定义数据层接口于映射配置:

在接口上加上@Mapper注解,自动生成一个代理对象,这样我们就不需要自己再创建一个实现类了,简化操作。

4.定义一个Javabean

5.在测试类中注入接口,测试功能

关于代理对象:

Mapper生成的代理对象是在Spring容器中,我们在测试类使用时需要拿出来,使用@Autowired是最简单的方法。

结语:

最后的最后,感谢大家观看到最后,如果对你有帮助,请一键三连,点赞,关注(拜托了),收藏,你的支持就是我最大的鼓励,持续更新对你有帮助的知识!

Read more

Visual C++ 6.0中文版安装包下载教程及win11安装教程

本文分享的是Visual C++ 6.0(简称VC++6.0)中文版安装包下载及安装教程,关于win11系统下安装和使用VC++6.0使用问题解答,大家在安装使用的过程中会遇到不同的问题,如遇到解决不了的问题请给我留言! 一、安装包的下载 vc6.0安装包下载连接: https://pan.quark.cn/s/710dc0efe636 二、安装vc++6.0 1.鼠标右键解压到“VC++ 6.0”安装包,解压后如图所示: 2.双击Steup.exe,进行安装; 3.点击下一步 4.更改路径,建议不要安装在C盘(默认盘符),可以选择其他的盘符,点击浏览进行更改盘符。 5.选择C盘(默认盘或系统盘)以外的盘符。

By Ne0inhk
C++ 继承入门(下):友元、静态成员与菱形继承的底层逻辑

C++ 继承入门(下):友元、静态成员与菱形继承的底层逻辑

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 前言 一. 友元 —— 友元关系不可继承   1、错误版本   2、正确版本 二. 静态成员 —— 继承体系中静态成员的共享性 三. 多继承及菱形继承问题:本质特点与解决方案   1、单继承与多继承模型   2、菱形继承:虚继承解决“数据冗余”与“二义性”     2.1 菱形继承出现的坑(解决二义性问题)     2.2 虚继承:彻底解决菱形继承问题     3、多继承中指针偏移问题 友元,静态成员,

By Ne0inhk
C++之基于正倒排索引的Boost搜索引擎项目介绍

C++之基于正倒排索引的Boost搜索引擎项目介绍

1. 为什么我们要写项目 1.1 把理论知识转化为实际能力 计算机专业的课程(如编程语言、数据结构、算法、操作系统等)多以理论和抽象概念为主,而项目是 “用起来” 的过程。比如学了数据结构中的链表、树,只有在做通讯录管理系统、文件索引工具等项目时,才能真正理解它们在实际场景中的作用;学了多线程,在开发简单的并发程序(如聊天软件)时,才会明白锁机制、线程同步的实际意义。 1.2 培养解决复杂问题的思维 项目开发中总会遇到各种 “意料之外” 的问题:代码逻辑漏洞、性能瓶颈、兼容性问题等。解决这些问题的过程,能倒逼你学会拆解问题、查阅文档(如官方手册、技术博客)、调试代码(用 IDE 断点、日志分析),甚至借鉴开源项目的思路 —— 这些都是未来工作中不可或缺的 “实战思维”。 1.3 理解完整的开发流程

By Ne0inhk
STL?vector!!!

STL?vector!!!

一、前言         之前我们借助手撕string加深了类和对象相关知识,今天我们将一起手撕一个vector,继续深化类和对象、动态内存管理、模板的相关知识 二、vector相关的前置知识         1、什么是vector?         vector是一个STL库中提供的类模板,它是存储元素对象的顺序表,其中提供了一些有关增删查改的接口,它的特点是可以通过下标的方式在表中的任意位置进行读、写         2、vector中的相关接口         在本文接下来的部分会介绍vector的常用接口,事实上借助这些接口就可以解决平常所能遇到的大部分问题,如果还需要了解vector提供的更多接口及使用方法的话,可以跳转到一下网页:         vector - C++ Referencehttps://legacy.cplusplus.com/reference/vector/vector/?kw=vector 三、手撕一个vector类         1、成员变量与整体框架         注意:之前的顺序表我们都是通过记录指针、元素个数和空

By Ne0inhk