1 初识MyBatis框架
约 5936 字大约 20 分钟
2025-12-18
学习目标
- 了解框架的概念和优点
- 了解 MyBatis 框架的概念和优点
- 掌握 MyBatis 环境搭建
- 掌握 MyBatis 入门程序的编写
- 熟悉 MyBatis 工作原理
随着业务发展,软件系统变得越来越复杂。如果所有功能都从零开始开发,会非常耗时且繁琐。此外,缺乏统一的调用规范会导致代码重复,增加二次开发和维护的难度。为解决这些问题,框架应运而生。框架提供了许多基础功能,使开发人员可以专注于业务逻辑,从而提高效率。目前,JavaEE 开发中常用的框架有 Spring、Spring MVC 和 MyBatis 等。
1.1 初识框架
在学习框架之前,先要理解框架的概念及其优势。本节将介绍框架的基本概念、优点以及当前流行的几种框架。
1.1.1 框架概述
“框架”一词最初用于建筑领域,指的是房屋的结构骨架。在编程中,框架则是应用程序的基础结构,开发者可以在其基础上添加自己的代码来构建所需的应用系统。
软件框架是一个可复用的开发环境,它提供特定功能以支持软件应用、产品和解决方案的创建。它包括了程序库、编译器、工具集和 API 等组件,这些共同作用于促进项目的开发过程。
可以把软件框架比作是盖楼时使用的梁、柱子和承重墙组成的钢筋混凝土结构,它是支撑整个建筑物的关键部分。同样地,在这个框架内实现的各种软件功能,就好比是在一栋大楼里设置的不同用途的空间,比如健身房、商店或是酒店等。
一个好的框架对于无论是建筑设计还是软件开发都至关重要,因为它不仅能帮助节省成本,还能确保质量并在有限资源下最大化效率。简而言之,框架的作用在于设立标准、保证质量、控制成本,从而让开发者能够更高效地完成高质量的工作。
1.1.2 框架的优势
早期 JavaEE 应用开发中,企业开发人员主要使用 JSP + Servlet 技术。但这种方式存在两大问题:一是系统维护困难,因为分层不清晰导致业务逻辑难以独立分离;二是代码重用率低,每次新项目都需要从头开始编写大量代码,增加了出错风险。为解决这些问题,开发者推出了多种框架,它们相比 JSP + Servlet 有以下优点:
- 提高开发效率:成熟的框架能够处理事务、安全性和数据流控制等基础任务,让程序员专注于业务逻辑的实现。
- 增强代码规范性与可维护性:框架通常遵循严格的编码标准,有助于保持团队内的一致性,使得多人协作更加顺畅。
- 提升软件性能:利用框架(如 Spring 或 MyBatis)可以减少冗余代码,例如通过 Spring 的 IoC 特性简化对象间的依赖管理,或者借助 MyBatis 轻松配置动态 SQL 语句。
1.1.3 当前主流框架
在 JavaEE 开发中离不开框架,使用框架可以减少代码冗余,提高程序运行速度,规范编程且便于代码维护。下面介绍几种当前 Java EE 开发中常见的框架。
- Spring 框架:Spring 是一个开源框架,旨在简化企业级应用开发。它采用分层架构,支持将不同的单层框架(如 Struts、Hibernate)整合成一个连贯的体系,为 POJO 提供企业级服务。
- Spring MVC 框架:Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的 Web 开发模块,用作控制器来处理模型与视图间的数据交互。它具有良好的可配置性、扩展性和灵活性,并且能与 Spring 无缝集成,在 Web 开发中广泛应用。
- MyBatis 框架:MyBatis 是一个优秀的持久层框架,源自于 Apache 的 iBatis 项目,后迁至 GitHub。它允许开发者手动映射实体类和 SQL 语句,实现半自动化的 ORM 功能。由于其高性能和易学性,在互联网应用中被广泛采用。
- Spring Boot 框架:Spring Boot 由 Pivotal 团队开发,旨在简化 Spring 应用程序的设置过程,使用户能够快速构建独立运行的应用程序。它集成了多种第三方库,减少了配置需求,提高了开发效率。
- Spring Cloud 框架:Spring Cloud 是一系列用于构建微服务架构的工具集合,利用了 Spring Boot 的便捷性来简化分布式系统的开发工作。它提供了包括配置管理、服务发现等功能的一站式解决方案,特点是易于理解和维护。
1.2 MyBatis 介绍
Java 程序通过 Java 数据库连接(JDBC)来操作数据库,但在大型企业项目中,由于频繁的数据库交互和大量的数据读写,仅使用 JDBC 难以达到性能需求。此外,JDBC 还存在代码冗余、复用性差等问题。因此,在企业级开发中,通常采用如 MyBatis 这样的 ORM 框架来操作数据库。接下来将详细介绍 MyBatis 的基础知识。
1.2.1 传统 JDBC 的劣势
JDBC 是 Java 应用程序访问数据库的基础,提供了一套标准 API 用于执行数据库操作。尽管如此,JDBC 存在以下局限性:
- 资源管理效率低:频繁创建和销毁连接消耗大量资源。
- 代码维护困难:SQL 语句硬编码于 Java 代码中,使得修改业务逻辑或数据模型时需手动调整源码。
- 参数传递及 SQL 构造不灵活:即使使用 PreparedStatement,根据条件动态构建 SQL 仍需硬编码,增加复杂度。
- 结果集处理僵化:依赖固定列名映射规则处理结果集,表结构调整后需相应变更解析逻辑。
为解决这些问题,推荐使用 ORM 框架如 MyBatis 或 Hibernate 来简化数据库层设计与实现。考虑到易用性和学习成本,本教材将重点介绍 MyBatis。
1.2.2 MyBatis 概述
MyBatis 是一个强大的持久层框架,支持 SQL 查询和高级映射,极大简化了 JDBC 代码的编写。它提供 XML 配置和注解两种方式来实现 Java 对象与数据库表之间的自动映射,使开发者能以面向对象的方式操作数据库,提高开发效率并减少错误。
作为 ORM 框架,MyBatis 解决了对象与关系型数据库类型不匹配的问题。通过定义映射规则,当对象变化时,数据库也会自动同步更新,反之亦然。这简化了数据库操作逻辑,让开发者更专注于业务逻辑。例如,使用 MyBatis 更新用户信息只需更改 User 对象属性值并调用相应方法即可,无需编写复杂的 SQL 语句。
总之,MyBatis 不仅简化了数据库交互过程,还提供了高效的数据管理方式,是快速构建高质量 Web 应用或企业级系统的理想选择。其灵活性和易用性使其成为许多项目的首选数据持久化方案。
图1-1 ORM 框架的工作原理

从图1-1可以看出,使用 ORM 框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象(Persistent Object,PO)。ORM 框架会通过映射关系将这些面向对象的操作转换成底层的 SQL 操作。
MyBatis 作为一个优秀的持久层框架,它对 JDBC 操作数据库的过程进行了封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理注册驱动、创建 Connection 对象、创建 Statement 对象、手动设置参数、结果集检索等 JDBC 繁杂的过程代码。
针对 1.2.1 节提到的 JDBC 编程的劣势,MyBatis 提供了以下解决方案,具体如下:
问题一:频繁地创建、释放数据库连接会造成系统资源浪费,从而影响系统性能。
解决方案:在 SqlMapConfig.xml 中配置数据连接池,使用数据库连接池管理数据库连接。
问题二:代码中的 SQL 语句硬编码,会造成代码不易于维护。在实际应用的开发中,SQL 变化的可能性较大。在传统 JDBC 编程中,SQL 变动需要更改 Java 代码,违反了开闭原则。
解决方案:MyBatis 将 SQL 语句配置在 MyBatis 的映射文件中,实现了与 Java 代码的分离。
问题三:使用 PreparedStatement 向占位符传参数存在硬编码,因为 SQL 语句的 where 条件不确定,如果有修改 SQL 的需求,必须要修改代码,这样会导致系统难以维护。
解决方案:MyBatis 自动将 Java 对象映射至 SQL 语句,通过 Statement 中的 parameterType 定义输入参数的类型。
问题四:JDBC 对结果集解析存在硬编码(查询列名),SQL 变化导致解析代码变化,使得系统不易于维护。
解决方案:MyBatis 自动将 SQL 执行结果映射至 Java 对象,通过 Statement 中的 resultType 定义输出结果的类型。
1.3 MyBatis 环境搭建
使用 MyBatis 框架进行数据库开发前,需要先搭建 MyBatis 环境。MyBatis 环境搭建的基本步骤包括创建工程、引入相关依赖、创建数据库、创建数据库连接信息配置文件、创建 MyBatis 的核心配置文件。本书采用 MyBatis 3.5.2 版本搭建 MyBatis 环境,具体步骤如下。
1. 创建工程
启动 IntelliJ IDEA 开发工具,创建 maven 项目

父工程:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.weew12.github</groupId>
<artifactId>heima_ssm_book</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>ch1</module>
</modules>
<packaging>pom</packaging>
<name>heima_ssm_book</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>ch1 本章节内容工程:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>heima_ssm_book</artifactId>
<groupId>io.weew12.github</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ch1</artifactId>
<packaging>jar</packaging>
<name>ch1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</project>2. 引入相关依赖
在以往 Java 项目的开发中,需要在项目中引入许多 JAR 包以便于调用 JAR 包中封装好的常用类集。但由于 JAR 包占用的内存空间较大,给项目的打包和发布带来了极大的不便,基于以上原因,Apache 公司开发了项目管理工具 Maven。Maven 使用 Maven 仓库管理 JAR 包,使用 Maven 管理项目不需要再引入一个个的 JAR 包,只需将 JAR 包的依赖引入项目的 pom.xml 文件中就可以调用 JAR 包中的类,极大提高了开发人员的编程效率。
由于本项目要连接数据库并对程序进行测试,所以需要在项目的 pom.xml 文件中引入:
- MySQL 驱动包
- JUnit 测试包
- MyBatis 的核心包等相关依赖
具体代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>heima_ssm_book</artifactId>
<groupId>io.weew12.github</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ch1</artifactId>
<packaging>jar</packaging>
<name>ch1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- MyBatis 的核心包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!-- MySQL 驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- JUnit 测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>3. 创建数据库
在 MySQL 中创建一个名称为 mybatis 的数据库,具体 SQL 语句如下:
CREATE DATABASE heima_ssm_book;
4. 创建数据库连接信息配置文件
在项目的 src/main/resources 目录下创建数据库连接的配置文件,这里将其命名为 db.properties,在该文件中配置数据库连接的参数。db.properties 文件的具体内容如文件1-1所示。

文件1-1 db.properties
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/heima_ssm_book?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=1234565. 创建 MyBatis 的核心配置文件
在项目的 src/main/resources 目录下创建 MyBatis 的核心配置文件,该文件主要用于项目的环境配置,如数据库连接相关配置等。核心配置文件可以随意命名,但通常将其命名为 mybatis-config.xml。如无特殊说明,本书中的 MyBatis 核心配置文件均命名为 mybatis-config.xml。mybatis-config.xml 的具体实现如文件1-2所示。
配置文件参考:https://mybatis.org/mybatis-3/configuration.html
dfd 参考:https://github.com/mybatis/mybatis-3/tree/master/src/main/resources/org/apache/ibatis/builder/xml
文件1-2 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载类路径下的属性文件-->
<properties resource="db.properties"/>
<!-- 环境配置-->
<environments default="development">
<environment id="development">
<!-- 事务管理器-->
<transactionManager type="JDBC"/>
<!-- 数据源配置-->
<dataSource type="POOLED">
<!-- 数据库连接相关配置 使用db.properties中的内容-->
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
</configuration>1.4 MyBatis 入门程序
1.3 节完成了 MyBatis 环境的搭建,下面将在 MyBatis 环境下实现一个入门程序来演示 MyBatis 框架的使用(如果不做特别说明,后续编码都将在 1.3 节搭建的 MyBatis 环境下进行),该程序要求实现根据 id 查询用户信息的操作,具体实现步骤如下。
1. 数据准备
在 mybatis 数据库中创建 users 表,并在 users 表中插入两条数据,具体 SQL 语句如下:
use heima_ssm_book;
create table ch1_users
(
uid int primary key auto_increment,
uname varchar(20) not null,
uage int not null
);
insert into ch1_users(uid, uname, uage)
values (null, 'weew12', 20),
(null, 'weew13', 28);2. 创建 POJO 实体
在项目的 src/main/java 目录下创建 User 类,该类用于封装 User 对象的属性,如文件1-3所示。
文件1-3 User.java
package io.weew12.github.pojo;
public class User {
// 用户id
private int uid;
// 用户姓名
private String uname;
// 用户年龄
private int uage;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getUage() {
return uage;
}
public void setUage(int uage) {
this.uage = uage;
}
}3. 创建映射文件 UserMapper.xml
在项目的 src/main/resources 目录下创建一个 mapper 文件夹,在 mapper 文件夹下创建映射文件 UserMapper.xml,该文件主要用于配置 SQL 语句和 Java 对象之间的映射,使 SQL 语句查询出来的数据能够被封装成 Java 对象。一个项目中可以有多个映射文件,每个实体类都可以有其对应的映射文件。映射文件通常使用 POJO 实体类名 + Mapper 命名。例如,User 实体类的映射文件名称就为 UserMapper.xml。UserMapper.xml 的实现具体如文件1-4所示。

文件1-4 UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper为映射的根节点,namespace 指定DAO接口的完整类名-->
<!--mybatis 会依据这个接口动态创建一个实现类去实现这个接口,而这个实现类是一个 Mapper 对象-->
<mapper namespace="io.weew12.github.pojo.User">
<!--id="接口中的方法名"-->
<!--parameterType="传入的参数类型"-->
<!--resultType="返回实体类对象,使用包.类名-->
<select id="findById" parameterType="int" resultType="io.weew12.github.pojo.User">
select *
from heima_ssm_book.ch1_users
where uid = #{id}
</select>
</mapper>在文件1-4中:
- 第 2~4 行代码是映射文件的约束信息;
- 根元素
<mapper>,元素中可包含用于增删改查操作的<select>、<insert>、<update>和<delete>等元素。元素中的namespace属性用于标识映射文件,namespace属性的值通常设置为对应实体类的全限定类名; - 第 13~16 行代码为查询语句块,用于 SQL 查询语句模板的编写。需要注意的是,元素中的
id属性用于唯一标识该 SQL 语句块,Java 代码通过id属性的值找到对应的 SQL 语句块。
4. 修改 mybatis-config.xml 配置文件
在 mybatis-config.xml 配置文件中添加 UserMapper.xml 映射文件路径的配置,用于将 UserMapper.xml 映射文件加载到程序中。具体代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载类路径下的属性文件-->
<properties resource="db.properties"/>
<!-- 环境配置-->
<environments default="development">
<environment id="development">
<!-- 事务管理器-->
<transactionManager type="JDBC"/>
<!-- 数据源配置-->
<dataSource type="POOLED">
<!-- 数据库连接相关配置 使用db.properties中的内容-->
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!-- mapping 文件路径配置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>上述代码中,<mapper> 元素指定了 UserMapper.xml 映射文件的路径。
注意:
如果一个项目有多个映射文件,则需要在
mybatis-config.xml核心配置文件中的<mappers>元素下配置多个<mapper>元素指定映射文件的路径。
5. 编写测试类
在项目的 src/test/java 目录下创建 Test 包。在 Test 包下创建 UserTest 类,该类主要用于程序测试,如文件1-5所示。
文件1-5 UserTest.java
package io.weew12.github;
import io.weew12.github.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.Reader;
public class UserTest {
@Test
public void userFindByIdTest() {
String resources = "mybatis-config.xml";
// 获取文件流
Reader reader = null;
try {
// 读取mybatis-config.xml
reader = Resources.getResourceAsReader(resources);
} catch (IOException e) {
e.printStackTrace();
}
// 初始化mybatis数据库 创建sqlSessionFactory 实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 获取sqlSession实例
SqlSession sqlSession = sqlSessionFactory.openSession();
// 传递参数
User user = sqlSession.selectOne("findById", 1);
// 输出结果
System.out.println(user.getUname());
// 关闭session
sqlSession.close();
}
}在文件1-5中:
- 读取
mybatis-config.xml文件内容到 reader 对象中; - 创建
SqlSessionFactory类的实例,并通过SqlSessionFactory类的实例创建SqlSession实例; - 调用
selectOne()方法,查询 id 为 1 的用户信息,并将查询结果返回给 User 对象。
文件1-5 的运行结果如图1-5所示:

1.5 MyBatis 工作原理
在学习了 MyBatis 环境搭建和入门程序的编写之后,可结合 1.4 节 MyBatis 入门程序,对 MyBatis 操作数据库的流程进行分析,如图1-6所示。

在图1-6中,MyBatis 操作数据库的流程分为 8 个步骤,具体介绍如下:
- MyBatis 读取核心配置文件 mybatis-config.xml
mybatis-config.xml核心配置文件主要配置了 MyBatis 的运行环境等信息。 - 加载映射文件 Mapper.xml
Mapper.xml文件即 SQL 映射文件,该文件配置了操作数据库的 SQL 语句,需要在mybatis-config.xml中加载才能执行。mybatis-config.xml可以加载多个映射文件,每个映射文件对应数据库中的一张表。 - 构造会话工厂
通过 MyBatis 的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。 - 创建会话对象
由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行 SQL 语句的所有方法。 - 创建执行器
会话对象本身不能直接操作数据库,MyBatis 底层定义了一个 Executor 接口用于操作数据库,执行器会根据SqlSession传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。 - 封装 SQL 信息
SqlSession内部通过执行器Executor操作数据库,执行器将待处理的 SQL 信息封装到MappedStatement对象中,MappedStatement对象中存储了要映射的 SQL 语句的 id、参数等。Mapper.xml文件中一个 SQL 语句对应一个MappedStatement对象,SQL 语句的 id 即是MappedStatement的 id。Executor 执行器会在执行 SQL 语句之前,通过MappedStatement对象将输入的参数映射到 SQL 语句中。 - 操作数据库
根据动态生成的 SQL 操作数据库。 - 输出结果映射
执行 SQL 语句之后,通过MappedStatement对象将输出结果映射至 Java 对象中。
通过对 MyBatis 框架工作原理的讲解,相信读者对 MyBatis 框架已经有了一个初步的了解。对于初学者来说,上面所讲解的内容可能无法完全理解,现阶段也不要求读者能完全理解。这里讲解 MyBatis 框架的工作原理是为了方便后续的学习,读者能够了解 MyBatis 的工作原理和执行流程即可。
1.6 小结
本章介绍了MyBatis框架,包括其概念、优点及与主流JavaEE框架的对比。通过分析传统JDBC的不足,引出了MyBatis,并详细讲解了它的环境搭建、基础使用和工作原理。学完本章后,读者将能够理解MyBatis的作用及其工作方式,并能独立完成环境配置和初步编程。
【思考题】
- 请简述什么是 MyBatis。
MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。它的主要优点包括:易于上手、灵活性高、性能优秀等。
- 请简要介绍 MyBatis 的工作原理。
MyBatis 的工作流程主要包括以下几个步骤:
- 配置解析:首先,MyBatis 在启动时会读取配置文件(通常是 mybatis-config.xml),这个文件包含了数据库连接信息、环境配置、映射文件路径等关键信息。此外,还会加载 SQL 映射文件,这些文件定义了如何将 Java 对象与数据库表进行映射。
- 创建会话工厂:基于配置文件的信息,MyBatis 创建一个 SqlSessionFactory 对象。SqlSessionFactory 是线程安全的,并且在整个应用程序中只需要创建一次。
- 打开会话:通过 SqlSessionFactory 可以打开一个或多个 SqlSession 实例。SqlSession 提供了执行命令所需的所有方法,如查询、插入、更新、删除等操作。每个线程都应该有自己的 SqlSession 实例。
- 执行 SQL 语句:在 SqlSession 中,可以调用特定的方法来执行已定义好的 SQL 语句。MyBatis 支持两种方式来定义 SQL 语句:XML 配置文件或者注解。当执行 SQL 时,MyBatis 会根据传入的参数动态生成最终的 SQL 语句,并通过 JDBC 执行。
- 处理结果:执行完 SQL 后,MyBatis 会自动处理返回的结果集,将其转换为 Java 对象。如果需要的话,还可以利用 MyBatis 强大的映射功能实现复杂的数据结构转化。
- 关闭会话:最后,在完成所有数据库操作后,应该关闭 SqlSession 来释放资源。如果不关闭,可能会导致数据库连接池耗尽的问题。
以上就是关于 MyBatis 简介及其工作原理的基本概述。希望这能帮助你更好地理解这一强大的 ORM 工具是如何工作的。
