MyBatis基础教程:Java持久层框架入门
文章长度约2584字,适合初学者一步步学习MyBatis的基础使用。
一、开篇:什么是MyBatis?它能做什么?

在开发Java程序时,我们经常需要和数据库打交道。例如,把用户信息存到数据库里,或者从数据库中查询订单数据等等。
Java与数据库之间的交互被称为“持久层”操作。
传统的做法是直接写JDBC代码(Java Database Connectivity),但这种方式写起来很麻烦、重复性强。于是,就有了各种“持久层框架”,帮助我们简化数据库的操作。
🔍 什么是MyBatis?
MyBatis 是一个基于 Java 的持久层框架,它可以让我们用更简单的方式去操作数据库。
它不是全自动的ORM框架(比如Hibernate),而是“半自动化”的:你只需要关注SQL怎么写,MyBatis帮你把结果自动映射成Java对象。
✅ MyBatis优点:
- SQL和Java代码分离,易于维护。
- 支持动态SQL,灵活应对复杂条件。
- 轻量级,不依赖容器即可运行。
- 性能高,便于调试优化。
🎯 一句话总结:
MyBatis 就像是一位翻译官,把你写的 SQL 和数据库的响应翻译成 Java 对象。
二、环境准备:搭建你的第一个MyBatis项目

我们要做的第一步:创建一个简单的Maven项目,并引入MyBatis和MySQL驱动。
🛠 步骤1:安装开发工具
- 安装 JDK 1.8+
- 安装 IntelliJ IDEA 或 Eclipse
- 安装 MySQL 数据库(本教程使用 MySQL)
🗂 步骤2:创建Maven项目
使用IDEA创建一个新项目,选择 Maven → Create from archetype,选 maven-archetype-quickstart,填写 GroupId 和 ArtifactId。
完成后你会看到如下目录结构:
src/
├── main/
│ ├── java/ --> Java代码放这里
│ └── resources/ --> 配置文件放这里
└── test/
└── java/ --> 测试代码放这里
pom.xml --> Maven配置文件
🧾 步骤3:添加MyBatis和MySQL依赖
打开 pom.xml,在 <dependencies> 中添加如下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
保存后,Maven会自动下载所需的jar包。
三、核心概念讲解:理解MyBatis的关键术语

虽然一开始看起来有点复杂,但只要理解几个关键概念,MyBatis就变得非常容易。
⚙️ 核心组成部分一览:
| 名称 | 作用说明 |
|---|---|
SqlSessionFactoryBuilder |
构建 SqlSessionFactory |
SqlSessionFactory |
工厂,用来创建 SqlSession |
SqlSession |
连接数据库的会话对象 |
Mapper 接口 |
用于定义数据库操作方法(如查询、新增等) |
XML 映射文件 |
编写 SQL 语句的地方 |
下面我们来详细说说这些是怎么工作的。
🔁 SqlSessionFactoryBuilder & SqlSessionFactory
这两者是用来创建数据库连接工厂的。你可以把它想象成一个“生产工厂的机器”。
示例代码:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
上面的代码读取了一个名为 mybatis-config.xml 的配置文件,然后构建了一个可以生成数据库连接的工厂类。

💬 SqlSession
有了工厂,就能生产产品了。这里的“产品”就是 SqlSession,它是和数据库打交道的具体通道。
示例代码:
try (SqlSession session = sqlSessionFactory.openSession()) {
// 使用session进行CRUD操作
}
📑 Mapper接口 + XML文件
这是最核心的部分。我们可以将它理解为两部分:
- Mapper接口:定义你想执行的数据库操作(如查找所有用户)
- XML映射文件:实际写SQL的地方,并告诉MyBatis如何将结果映射到Java对象
示例:User.java(实体类)
public class User {
private int id;
private String name;
private String email;
// Getter and Setter 省略
}
示例:UserMapper.java(接口)
public interface UserMapper {
List<User> getAllUsers();
}
示例:UserMapper.xml(XML映射文件)
放在 resources 目录下,路径保持一致:
<?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="getAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
</mapper>
📌 namespace 必须对应你的接口类全名
📌 id 必须和接口中的方法名一致
📌 resultType 告诉MyBatis这个SQL返回的结果要转换成什么Java类
四、实战项目:写一个“查用户列表”的完整例子
现在我们来动手实现一个功能:从数据库中查询所有用户的列表。
📦 项目结构概览:
src/
├── main/
│ ├── java/
│ │ └── com.example.demo/
│ │ ├── Main.java --> 主程序
│ │ └── model/User.java --> 用户实体类
│ │ └── mapper/UserMapper.java
│ ├── resources/
│ ├── mybatis-config.xml
│ └── com/example/mapper/UserMapper.xml
└── pom.xml
📘 步骤1:创建数据库表
登录MySQL,创建一张 users 表:
CREATE DATABASE demo;
USE demo;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100)
);
-- 插入测试数据
INSERT INTO users(name, email) VALUES('Tom', 'tom@example.com');
INSERT INTO users(name, email) VALUES('Jerry', 'jerry@example.com');
📘 步骤2:编写配置文件 mybatis-config.xml
路径: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/demo"/>
<property name="username" value="root"/>
<property name="password" value="yourpassword"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.example.mapper"/>
</mappers>
</configuration>
📌 注意修改你的数据库地址、用户名和密码!
📘 步骤3:主函数执行查询
路径:Main.java
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.InputStream;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.getAllUsers();
for (User user : users) {
System.out.println("ID: " + user.getId() + ", Name: " + user.getName());
}
}
}
}
▶️ 最终效果:
运行主类后,你会在控制台看到类似输出:
ID: 1, Name: Tom
ID: 2, Name: Jerry
🎉 成功!你已经完成了一个完整的MyBatis查询任务!
五、常见问题解答(FAQ)
| 问题描述 | 解决方案 |
|---|---|
| 报错:Class not found | 检查MyBatis配置中是否包含了正确的Mapper类或XML路径 |
| SQL语句执行但没结果 | 确保数据库中有相应数据,且SQL正确 |
| 无法连接数据库 | 检查 mybatis-config.xml 中的数据库配置 |
| 报错“No transaction manager” | 查看 <transactionManager> 设置是否为JDBC |
| 查询结果字段匹配不上 | 确保数据库列名与Java属性名一致,或使用 <resultMap> 手动映射 |
💡 小技巧:可以在MyBatis配置中开启日志,查看执行的SQL语句:
在 mybatis-config.xml 添加:
<settings>
<setting name="log4j" value="STDOUT_LOGGING"/>
</settings>
六、学习建议:下一步该学什么?
恭喜你完成了MyBatis入门的第一步!
接下来你可以继续深入以下几个方向:
✅ 动态SQL
MyBatis 提供了强大的动态SQL功能,比如 <if>、<choose>、<foreach>,非常适合处理复杂的条件查询。
✅ 注解方式代替XML
除了使用XML文件,也可以使用注解方式写SQL:
@Select("SELECT * FROM users")
List<User> getAllUsers();
✅ 结合Spring Boot使用
在企业项目中,MyBatis通常和Spring Boot一起使用,进一步简化配置和事务管理。
📘 推荐资料
- 官方文档:https://mybatis.org/mybatis-3/zh/index.html
- 视频课程推荐:B站《黑马程序员MyBatis》系列
- 实战练习:自己尝试实现“增删改查”功能
✅ 小结
| 内容要点 | 简要说明 |
|---|---|
| MyBatis 是什么 | 轻量级持久层框架,简化数据库操作 |
| 环境搭建 | Maven + MyBatis + MySQL |
| 核心组件 | SqlSession、Mapper接口、XML映射文件 |
| 核心流程 | 创建会话 -> 获取Mapper -> 执行SQL |
| 实战任务 | 查询用户列表 |
| 学习路线 | 动态SQL、注解方式、结合Spring Boot |
🎯 下一步行动
✅ 自己再独立写一遍本教程中的小项目
✅ 尝试实现“插入用户”功能
✅ 修改查询条件,支持根据名字模糊搜索
✅ 上网查找MyBatis+Spring Boot整合教程
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏或分享给朋友。
持续更新更多Java后端技术文章,敬请关注!

评论 0