MyBatis基础教程:Java持久层框架入门
开篇:MyBatis是什么?为什么要用它?

在开发Java应用程序时,我们经常需要将数据保存到数据库中。而传统的做法是使用JDBC(Java Database Connectivity)来操作数据库,这种方式虽然直接但编写起来非常繁琐,代码重复度高且不易维护。MyBatis 是一个轻量级的 Java 持久层框架,它简化了与数据库交互的过程,使开发者能够更专注于业务逻辑而不是底层的 SQL 操作。
MyBatis 的核心思想是“让 SQL 回归程序员手中”,也就是说,它不会像 Hibernate 那样自动生成复杂的 SQL 语句,而是让我们自由地编写 SQL,并通过简单的映射机制自动将结果转换为 Java 对象。这种模式既保留了灵活性,又极大地提高了开发效率。对于初学者而言,学习 MyBatis 能够帮助你快速掌握数据库操作的核心技巧,是迈向后端开发的重要一步。
学习目标:
- 理解什么是 MyBatis,为什么选择它。
- 掌握 MyBatis 的基本环境搭建方法。
- 学会如何使用 MyBatis 进行数据库操作。
- 完成一个简单的增删改查示例项目。
- 了解常见的新手问题及解决办法。
接下来的内容将围绕这些目标展开,带你从零开始一步步掌握 MyBatis 的基础应用。
第一章:环境准备

在开始学习 MyBatis 之前,我们需要先准备好开发环境。本章节会引导你安装和配置必要的软件工具,包括 Java、MySQL、IDEA 和 Maven,确保你的计算机具备运行 MyBatis 示例程序的基础条件。
Step 1:安装 Java
MyBatis 是基于 Java 的框架,因此我们首先需要确保电脑上已经安装了 Java 开发环境。目前推荐使用 Java 8 或以上版本,因为它在兼容性和稳定性方面表现良好。
安装步骤:
- 访问 Oracle JDK 下载页面,选择适合你操作系统的 JDK 版本进行下载(注意选择正确的系统架构,如 Windows x64、MacOS 或 Linux)。
- 双击安装文件并按照提示完成安装。
- 打开命令行工具(Windows 上为 CMD,Mac/Linux 上为 Terminal),输入以下命令检查是否安装成功:
java -version
javac -version
如果你看到了类似下面的输出,则表示 Java 已成功安装:
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
Step 2:安装 MySQL
MyBatis 需要一个数据库来存储数据,这里我们选择使用 MySQL,这是一个广泛使用的开源关系型数据库管理系统。
安装步骤:
- 前往 MySQL官网,选择适合你系统的安装包下载。
- 双击安装文件,运行 MySQL Installer,按照向导逐步安装(建议选择默认配置即可)。
- 在安装过程中,请记住你设置的 root 用户密码(这将是后续连接数据库的关键)。
- 安装完成后,在命令行输入以下命令测试是否可以登录:
mysql -u root -p
输入你设定的密码后,如果进入了 MySQL 控制台(看到 mysql> 提示符),则说明安装成功。你可以输入以下命令退出:
exit;
Step 3:安装 IntelliJ IDEA
IntelliJ IDEA 是一款功能强大的 Java 集成开发环境(IDE),可以帮助我们高效编写和调试 Java 代码。我们将使用其社区版来进行 MyBatis 学习。
安装步骤:
- 打开浏览器访问 IntelliJ IDEA 官网。
- 根据操作系统选择 IntelliJ IDEA Community Edition(免费版本)下载。
- 运行安装程序,按照指引完成安装。
- 启动 IDEA 并进入欢迎界面,稍后我们会创建第一个 MyBatis 项目。
Step 4:安装 Maven
Maven 是一个用于自动化构建 Java 项目的工具,它能帮助我们轻松管理依赖库,包括 MyBatis 和 MySQL 驱动等。
安装步骤:
- 访问 Maven 官网,下载最新版本的 Apache Maven ZIP 文件。
- 解压 ZIP 文件到某个固定目录,例如
C:\Program Files\Apache\maven(Windows)或/opt/maven(Linux/Mac)。 - 设置环境变量:
- Windows:
- 新建系统变量
MAVEN_HOME,值为你解压 Maven 的路径(如C:\Program Files\Apache\maven)。 - 编辑
Path变量,新增%MAVEN_HOME%\bin。
- 新建系统变量
- Linux/Mac:
- 编辑
.bashrc或.zshrc文件,加入以下内容:export MAVEN_HOME=/opt/maven export PATH=$PATH:$MAVEN_HOME/bin - 保存文件后执行
source ~/.bashrc或source ~/.zshrc刷新配置。
- 编辑
- Windows:
- 在命令行中输入以下命令验证安装是否成功:

mvn -v
你应该看到类似于以下输出的信息:
Apache Maven 3.8.6 (84538499d64970c0e00bdffdc15b112a5f8c3b99)
Maven home: /opt/maven
Java version: 1.8.0_301, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-48-generic", arch: "amd64", family: "unix"
恭喜!你已经完成了所有必要的环境准备工作,接下来我们可以正式开始学习 MyBatis 了。
第二章:MyBatis的核心概念

MyBatis 作为一个优秀的 ORM(Object Relational Mapping,对象关系映射)框架,主要通过几个关键组件来实现数据库操作的便捷性。为了更好地理解和使用 MyBatis,我们需要先了解它的几个核心概念:SqlSessionFactoryBuilder、SqlSession、以及 Mapper 文件的作用。
1. SqlSessionFactoryBuilder 和 SqlSessionFactory
SqlSessionFactoryBuilder 是 MyBatis 的起点,它的作用是从配置文件(通常是 mybatis-config.xml)中读取信息,构建一个 SqlSessionFactory 实例。这个工厂类一旦创建完成,就可以用来生成用于执行 SQL 语句的 SqlSession 对象。
简单来说,SqlSessionFactoryBuilder 就像是一个“工厂建造者”,它根据图纸(配置文件)打造了一个可以生产“车间”(SqlSession)的“工厂”(SqlSessionFactory)。
使用示例:
// 读取 mybatis-config.xml 配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
在这个例子中,我们首先加载了 mybatis-config.xml 配置文件,然后通过 SqlSessionFactoryBuilder 构建出 SqlSessionFactory。整个过程就像在按说明书组装一台机器,最终得到了一个可用的工厂。
2. SqlSession:执行 SQL 的“车间”
有了 SqlSessionFactory 后,我们可以通过它获取 SqlSession 对象。这个对象是我们与数据库交互的主要接口,它提供了执行 SQL 查询、插入、更新和删除的方法。
你可以把 SqlSession 想象成一个“生产车间”,里面有很多“工人”(Mapper 方法)可以直接根据指令(SQL 映射文件中的定义)去操作数据库。
使用示例:
try (SqlSession session = sqlSessionFactory.openSession()) {
// 获取 Mapper 并调用相应方法
UserMapper mapper = session.getMapper(UserMapper.class);
// 假设有一个查询用户的方法
User user = mapper.selectUserById(1);
System.out.println(user.getName());
}
在这段代码中,我们打开一个 SqlSession,并通过它获取对应的 UserMapper 接口实例。接着调用 selectUserById 方法,执行查询操作并打印用户名称。整个流程就像是在车间里安排了一名员工去完成任务。
需要注意的是,使用完 SqlSession 后必须关闭它,以避免资源泄漏。在上述代码中,我们使用了 try-with-resources 语法,这样可以保证会话在使用完毕后自动关闭。
3. Mapper 文件:SQL 映射规则
Mapper 文件是 MyBatis 中最重要的部分之一,它负责定义 SQL 语句和 Java 对象之间的映射关系。通常,每个 Mapper 文件都会对应一个接口(例如 UserMapper.java),并在 XML 文件中定义具体的 SQL 查询和操作。
我们可以把 Mapper 文件理解为“操作说明书”,里面详细记录了每条 SQL 应该如何执行,以及执行后的结果应该如何转换为 Java 对象。
示例: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="com.example.mapper.UserMapper">
<!-- 查询用户 -->
<select id="selectUserById" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
在这个例子中,<select> 标签定义了一个 SQL 查询,id="selectUserById" 表示这是 UserMapper 接口中 selectUserById 方法对应的 SQL。resultType 属性指定了该查询返回的对象类型,即 com.example.model.User。
小结
- SqlSessionFactoryBuilder:根据配置文件创建
SqlSessionFactory。 - SqlSessionFactory:是一个工厂类,用于生成
SqlSession。 - SqlSession:用于执行 SQL 查询和事务控制。
- Mapper 文件:定义 SQL 语句和 Java 对象的映射关系。
现在你已经了解了 MyBatis 的几个核心组件及其作用,接下来我们将通过一个实战项目来加深理解。
第三章:实战项目——实现一个简单的增删改查(CRUD)功能

现在我们已经掌握了 MyBatis 的基本概念和环境配置,接下来我们将通过一个完整的实战项目,来练习 MyBatis 中最常用的四个功能:增(Insert)、删(Delete)、改(Update)、查(Select)。
我们将以“用户管理”作为我们的示例场景,创建一个简单的用户管理系统,实现用户的添加、查询、更新和删除功能。整个过程会涵盖 MyBatis 的基本使用方式,并展示如何编写 SQL 映射文件和调用对应的 Java 接口。
步骤一:创建项目结构
首先,我们在 IntelliJ IDEA 中创建一个新的 Maven 项目,并引入 MyBatis 和 MySQL 相关的依赖。
1.1 创建 Maven 项目
- 打开 IDEA,点击 “Create New Project”。
- 选择 “Maven” 类型,并确保选择了 JDK 8 或更高版本。
- 输入 GroupId(例如 com.example),ArtifactId(例如 mybatis-demo)。
- 点击 Finish,等待项目初始化完成。
1.2 添加依赖项
打开 pom.xml 文件,在 <dependencies> 标签内添加以下依赖:
<!-- MyBatis 核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- 日志框架(可选) -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
保存文件后,Maven 会自动下载这些依赖库。
步骤二:配置 MyBatis
接下来我们需要配置 MyBatis 的全局配置文件 mybatis-config.xml,并设置数据库连接信息。
2.1 创建 mybatis-config.xml 文件
在 src/main/resources 目录下新建一个名为 mybatis-config.xml 的文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 数据库连接配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<!-- Mapper 文件注册 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
请将 url、username 和 password 替换为你自己的数据库信息。
步骤三:创建实体类和 Mapper 接口
为了与数据库表建立映射关系,我们需要创建一个 Java 实体类 User,并定义一个对应的 Mapper 接口。
3.1 创建 User.java 实体类
在 src/main/java/com/example/model 包下创建 User.java:
package com.example.model;
public class User {
private int id;
private String name;
private String email;
// Getter 和 Setter 方法
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
3.2 创建 UserMapper.java 接口
在 src/main/java/com/example/mapper 包下创建 UserMapper.java:
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
// 查询所有用户
List<User> selectAllUsers();
// 按 ID 查询用户
User selectUserById(int id);
// 插入用户
void insertUser(User user);
// 更新用户
void updateUser(User user);
// 删除用户
void deleteUser(int id);
}
步骤四:编写 SQL 映射文件
现在我们创建对应的 XML 映射文件来定义具体的 SQL 操作。
4.1 创建 UserMapper.xml 文件
在 src/main/resources/mapper 目录下新建 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="com.example.mapper.UserMapper">
<!-- 查询所有用户 -->
<select id="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
<!-- 按 ID 查询用户 -->
<select id="selectUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (name, email)
VALUES (#{name}, #{email})
</insert>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.example.model.User">
UPDATE users
SET name = #{name}, email = #{email}
WHERE id = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
步骤五:编写测试类
最后,我们创建一个 Main.java 类来测试各个数据库操作。
5.1 创建 Main.java 测试类
在 src/main/java/com/example 包下创建 Main.java,内容如下:
package com.example;
import com.example.mapper.UserMapper;
import com.example.model.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
// 加载配置文件
String resource = "mybatis-config.xml";

评论 0