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

黑马网课springboot3+vue3中大事件项目代码优化(前端篇)

黑马网课springboot3+vue3中大事件项目代码优化(前端篇)

大事件前端代码优化和功能添加详细对比分析 前言 本人在进行黑马网课springboot3加vue3的课程时,在后端中优化了一系列代码,和增加了新的功能,于是对前端代码也进行相应调整,使这些原版项目中没有实现的功能,在优化版项目中实现,以下是我我做出的优化和功能添加对比分析,后端篇优化可以去看我写的这个:黑马网课springboot3+vue3中大事件项目代码优化(后端篇) 详细代码差异对比 1. 用户密码修改功能 优化版项目中的UserResetPassword.vue文件实现了完整的密码修改功能: <script setup>import{ ref }from'vue'import{ userUpdatePasswordService }from'@/api/user.js'import{ ElMessage }from'element-plus'import{ useRouter }from'vue-router'const router

By Ne0inhk
DevUI 组织 2025 年度运营报告:扎根 AtomGit,开源前端再启新程

DevUI 组织 2025 年度运营报告:扎根 AtomGit,开源前端再启新程

在开源浪潮席卷全球的今天,DevUI 始终以「打造企业级前端开源解决方案」为初心,依托 AtomGit 平台的生态优势稳步前行。2025 年,我们聚焦组件迭代、生态共建与社区连接,在技术深耕与开源协作中收获颇丰。现将全年发展足迹与未来规划分享如下,致谢每一位同行者的支持! 一、年度核心成果:数据见证成长 * 项目矩阵持续扩容:新增 MateChat-React、react-devui 等 4 个衍生项目,形成覆盖 Vue、Angular、React 三大框架的全栈组件生态,累计开源仓库达 7 个 * 社区活力显著提升:全年接收 PR 提交 300+,Star 数稳步增长至 3.02k,累计下载量超 46.08k 次,核心项目 MateChat、vue-devui、ng-devui

By Ne0inhk
突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案

突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案

突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案 背景 随着AI技术的飞速发展,诸如DeepSeek R1、千问QWQ32、文小言、元宝等AI大模型迅速崛起。在AI大模型训练和微调、AI知识库建设中,数据集的获取已成为不可或缺的基础。尤其是在面对各式各样的网页数据结构时,将其整理成可用的数据集是一项极具挑战的任务。开发者不仅需要付出大量的开发和人工成本,还需应对复杂的网页数据获取难题。在这种情况下,一款能够自动化解决网页数据获取问题的工具变得尤为重要。 本文将介绍网页解锁器Web Unlocker API、网页抓取Web-Scraper以及搜索引擎结果页SERP API等工具,特别适合中小企业解决商业化网页数据集问题,展示其如何解决AI数据集网页抓取的难题,提供高效、自动化的数据获取解决方案。 什么是Web Unlocker API工具? Web Unlocker API是基于Bright Data的代理基础设施开发的,具备三个关键组件:请求管理、浏览器指纹伪装和内容验证。通过这些功能,它能够自动化处理所有网页解锁操作

By Ne0inhk

下载海康视频插件后,浏览器显示此站点正在尝试打开webcontrol浏览器中间件

已下载并安装海康的【VideoWebPlugin.exe】视频插件后,页面显示弹窗【要打开webcontrol浏览器中间件吗?xxxx://xxxxxx 想打开此应用】且页面仍然没有监控视频 解决步骤: 1、选中弹窗中的【xxxx://xxxxxx】这个地址并复制; 2、打开谷歌浏览器在地址栏输入【chrome://flags】,若是edge浏览器会自动跳转到【edge://flags】,其他浏览器同理; 3、在搜索框中输入【Insecure origins treated as secure】; 4、在输入框粘贴刚复制的【xxxx://xxxxxx】地址,并将【已停用】改为【已启用】,后点击右下角【重新启动】按钮重启浏览器; 5、重启后刷新该页面会在地址栏下方显示弹窗,点击【允许】按钮即可正常显示监控视频; *若点击的是【屏蔽】

By Ne0inhk