news 2026/4/23 9:19:14

3 MyBatis 测试流程与核心原理解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3 MyBatis 测试流程与核心原理解析

3 MyBatis 测试流程与核心原理解析

3.1 测试类整体结构

该UserTest类是基于 JUnit 框架的 MyBatis 测试类,主要包含四部分:
  1. 成员变量:存储关键对象(输入流、数据库会话、接口代理)。
  2. @Before 方法(init):测试前初始化资源,构建 MyBatis 运行环境。在每个@Test方法执行前自动调用,用于初始化资源(如加载配置文件、创建数据库连接)。
  3. @After 方法(destory):测试后释放资源,避免内存泄漏。在每个@Test方法执行后自动调用,用于释放资源(如关闭连接、流)。
  4. @Test方法:调用接口方法并验证结果。
UserTest 类就像一个 “测试实验室”,专门用来验证你的代码能不能正确从数据库里查数据。比如你写了个 “查用户” 的功能,得在这里试试好不好用。

3.1.1 成员变量详解

成员变量
private InputStream in = null; // 配置文件输入流 private SqlSession session = null; // MyBatis数据库会话 private UserDao userDao = null; // 数据访问接口代理对象
作用:
  • in:读取SqlMapConfig.xml配置文件。
  • session:执行 SQL、管理事务的核心对象。
  • userDao:通过代理调用UserDao接口的方法,映射 XML 中的 SQL。

3.1.2 @Before 方法

@Before 方法:初始化 MyBatis 环境
@Before //前置通知, 在方法执行之前执行 public void init() throws IOException { //1. 找配置文件 //加载主配置文件,目的是为了构建SqlSessionFactory对象 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2. 造一个"数据库连接器"工厂 //创建SqlSessionFactory对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3. 用工厂造一个"数据库连接器" //通过SqlSessionFactory工厂对象创建SqlSesssion对象 session = factory.openSession(); // 4. 造一个"查数据的工具" //通过Session创建UserDao接口代理对象 userDao = session.getMapper(UserDao.class); }
  1. 加载配置文件
  • Resources.getResourceAsStream("SqlMapConfig.xml"):从类路径(src/main/resources)读取 MyBatis 全局配置文件,转换为输入流。
  • 注意:文件需位于resources目录下,且文件名必须与参数一致(如SqlMapConfig.xml)。
白话:先找到 MyBatis 的 “使用说明书”(SqlMapConfig.xml),里面写着怎么连数据库、去哪找 SQL 语句。
  1. 创建 SqlSessionFactory
  • SqlSessionFactoryBuilder:构建器类,通过build(InputStream)方法解析配置文件,生成SqlSessionFactory。
  • SqlSessionFactory:工厂类,用于创建SqlSession(数据库会话),是线程安全的,建议在项目中作为单例存在。
白话:根据说明书,造一个 “连接器工厂”,专门生产连数据库的工具。
  1. 获取 SqlSession
  • factory.openSession():创建数据库会话,默认autoCommit=false(手动提交事务)。
白话:用工厂生产一个 “数据库连接器”(session),相当于拿到了操作数据库的钥匙。
注:如果增删改操作后数据库没变化,需要在测试方法里加 session.commit(),因为MyBatis 默认不自动保存。如果查不到数据,可能是 SQL 语句写错了,或者数据库连接信息(账号密码)不对,也可能是表名和实体类名对不上。
  1. 生成接口代理
  • session.getMapper(UserDao.class):通过动态代理生成UserDao接口的实现类对象。
  • 本质:该对象会将接口方法调用转换为 XML 中对应的 SQL 执行(如userDao.findAll()对应UserMapper.xml中的)。白话:再用连接器造一个 “查数据的工具”(userDao),这个工具能帮你执行 SQL 语句。

3.1.3 @After 方法

@After public void destory() { if (session != null) session.close(); if (in != null) in.close(); }
用完数据库连接器和说明书后,要记得 “关门”(关闭连接和文件),不然会浪费资源,就像用完水龙头不关会漏水一样。

3.1.4 @Test 方法

@Test 注解替代 main 方法
  • 在 JUnit 测试中,@Test注解标识的方法(如aaa())会被测试框架自动执行,相当于程序的入口,无需手动编写main方法。
  • 若去掉@Test,方法无法被执行;添加后,框架会调用该方法进行测试。
@Test public void aaa() { // 用工具查所有用户 List<User> users = userDao.findAll(); // 把查到的用户打印出来看看 for (User user : users) { System.out.println(user); } }
白话:
  1. 用 “查数据的工具” 喊一声 “给我查所有用户!”(userDao.findAll())。
  2. 工具会偷偷找到说明书里写的 SQL 语句(比如 select * from user),去数据库把数据查出来。
  3. 把查到的用户数据存到一个篮子里(List),然后逐个打印出来,看看是不是你想要的结果。

3.2 核心概念

  1. MyBatis 的定义
MyBatis 是一款基于 Java 的持久层框架,通过 ORM(对象关系映射)机制 将数据库操作与 Java 代码解耦。它允许开发者通过 XML 或注解配置 SQL 语句,避免直接编写繁琐的 JDBC 原生代码,实现 Java 对象与数据库表的映射关系,提升数据访问的开发效率。
白话:帮你省力气的 “数据库翻译官”,不用写复杂的连接代码,直接用 Java 方法调 SQL 语句。
  1. 配置文件(SqlMapConfig.xml)的作用(位置src/main/resources)
  • 作用:作为 MyBatis 的全局配置文件,包含数据库连接池配置(驱动、URL、用户名、密码)和映射文件注册(mappers标签)。
  • 白话:MyBatis 的 “使用说明书”,写着数据库账号密码、SQL 语句在哪找等重要信息。
  1. UserDao 接口的定位
UserDao 是遵循 DAO(数据访问对象)模式 定义的接口,用于封装用户相关的数据操作。其方法(如 findAll())通过 MyBatis 的动态代理机制,与映射文件中定义的 SQL 语句绑定。当调用接口方法时,MyBatis 会将其转换为对应的 SQL 执行,并将结果映射为 Java 对象(如 User 实体)返回,实现 “接口方法到 SQL 语句” 的自动化转换。
白话:定义的 “查数据接口”,比如 findAll() 就是 “查所有用户” 的命令,MyBatis 会把它翻译成 SQL 去执行。
  1. JUnit 测试的机制
JUnit 是 Java 单元测试框架,通过注解实现测试流程的自动化管理:
  • @Before:标注的方法在每个测试用例执行前自动调用,用于初始化资源(如加载 MyBatis 配置、创建数据库会话);
  • @Test:标注具体的测试方法(如 aaa()),用于验证业务逻辑(如查询用户列表);
  • @After:标注的方法在测试用例执行后调用,用于释放资源(如关闭数据库连接、输入流),避免资源泄漏。
整个流程遵循 “准备资源 → 执行测试 → 清理资源” 的生命周期管理模式,确保测试的可靠性和可重复性。
白话:自动运行测试的 “机器人”,@Before 是测试前的准备,@Test 是真正的测试任务,@After 是测试后的打扫。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 22:11:09

如何快速解决GSE宏限制:魔兽世界经典版完整指南

如何快速解决GSE宏限制&#xff1a;魔兽世界经典版完整指南 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. It uses Travis for UnitTests, Coveralls to report on test coverage and the Cur…

作者头像 李华
网站建设 2026/4/18 8:03:13

终极桌面体验:酷安Lite UWP客户端完整使用指南

终极桌面体验&#xff1a;酷安Lite UWP客户端完整使用指南 【免费下载链接】Coolapk-Lite 一个基于 UWP 平台的第三方酷安客户端精简版 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-Lite 还在为手机小屏幕浏览酷安社区而烦恼吗&#xff1f;想要在电脑上享受更…

作者头像 李华
网站建设 2026/4/23 4:06:37

Venera漫画阅读器:打造你的专属漫画图书馆

还在为漫画文件散落各处而烦恼&#xff1f;Venera漫画阅读器就是你的终极解决方案&#xff01;这款跨平台应用不仅支持CBZ、EPUB、PDF等多种格式&#xff0c;还能智能管理本地和网络漫画资源&#xff0c;让你享受一站式阅读体验。✨ 【免费下载链接】venera A comic app 项目…

作者头像 李华
网站建设 2026/4/19 23:00:53

AI如何帮你快速计算复杂行列式?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个AI辅助行列式计算工具&#xff0c;支持以下功能&#xff1a;1. 识别用户输入的行列式&#xff08;支持LaTeX或矩阵格式&#xff09;&#xff1b;2. 自动计算任意阶数行列式…

作者头像 李华
网站建设 2026/4/21 23:01:25

Qwen图像编辑终极指南:4步8秒快速生成高质量图片的完整教程

还在为复杂的AI图像编辑工具头疼吗&#xff1f;Qwen-Image-Edit-Rapid-AIO V10版本通过革命性的优化&#xff0c;让任何人都能在4步操作、8秒时间内生成专业级图像。这个基于Qwen-Image-Edit-2509的开源项目&#xff0c;将复杂的图像编辑流程简化到极致&#xff0c;即使是新手也…

作者头像 李华