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

llama-cpp-python架构深度解析:从底层C API到高级Python接口的技术演进

llama-cpp-python架构深度解析:从底层C API到高级Python接口的技术演进 【免费下载链接】llama-cpp-pythonPython bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 在现代AI应用开发中,本地大语言模型的部署与优化已成为技术团队面临的核心挑战。llama-cpp-python作为连接C++高性能推理引擎与Python生态的关键桥梁,其技术架构设计体现了对性能、易用性和扩展性的深度思考。 底层架构:C API的直接映射与优化 llama-cpp-python的核心价值在于其对llama.cpp C API的完整封装。通过ctypes接口,开发者可以直接访问底层C函数,同时享受Python语言的开发效率。这种设计模式既保留了原生C++的性能优势,又提供了Python生态的丰富资源。 该项目的技术栈建立在三个关键层次上: 原生C层:通过vendor/llama.cpp子模块直接集成最新的推理引擎,确保始终使用最优化的底层实现

By Ne0inhk

Python-okx库终极指南:加密货币量化交易API完整教程

Python-okx库终极指南:加密货币量化交易API完整教程 【免费下载链接】python-okx 项目地址: https://gitcode.com/GitHub_Trending/py/python-okx 你是否在为加密货币交易API的复杂集成而烦恼?是否需要一个既能处理现货交易又能管理衍生品合约的Python工具?python-okx库作为OKX交易所v5 API的Python封装,为量化交易新手和开发者提供了完整的解决方案,让你的交易策略开发效率提升3倍。 为什么你的交易策略需要python-okx库? 在加密货币交易中,API集成往往是最大的技术障碍。传统方案需要手动处理签名验证、错误重试、连接管理等繁琐细节,而python-okx库将这些复杂性全部封装,让你专注于策略逻辑。 痛点问题python-okx解决方案效率提升API签名复杂易错自动处理所有签名逻辑减少80%编码时间连接不稳定内置WebSocket重连机制99.9%连接成功率多账户管理困难统一子账户管理接口一键批量操作实时数据处理复杂异步WebSocket推送毫秒级响应 3步快速上手:从零

By Ne0inhk
python中的数据结构与算法(上)

python中的数据结构与算法(上)

相关概述 数据结构:存储和组织数据的方式方法 算法:解决问题的思路\方式 数据结构与算法的关系:算法是解决实际业务问题的思路,数据结构是算法的载体,高效的程序需要在数据结构的基础上设计和选择算法 终极意义:大大提高程序的性能和执行效率 程序 = 数据结构 + 算法 人工智能 = 算法 + 算力 + 数据  数据结构 数据结构是存储和组织数据的方式方法,合适的数据结构往往能带来比较大的性能提升 数据结构的分类:         线性结构(一个前驱父节点,一个后继子节点 --例如:栈\队列 )         线性结构的分类:                 顺序表:存储空间是连续的,存储方式分为一体式存储和分离式存储                         一体式存储:数据区和信息区在一起  arr = [1,2,3]                         分离式存储:数据区和信息区分开存储 arr = ['a',1,False,'asdf'

By Ne0inhk
【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南

【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】【MySQL】【Python】 目录 1、计算机基础概念 1.1、什么是计算机 1.2、什么是编程 1.3、编程语言有哪些 2、Python 背景知识 2.1、Python 是咋来的 2.2、Python 都能干啥 2.3、Python 的优缺点  2.4、Python 的前景(钱景)咋样 3、搭建 Python 环境  3.1、安装

By Ne0inhk