3 MyBatis 测试流程与核心原理解析
2026/5/6 19:42:52 网站建设 项目流程

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 是测试后的打扫。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询