MyBatis 基础教程:Java 持久层框架入门
一、开篇:MyBatis 是什么?我能用它做什么?

在 Java 开发中,我们经常需要和数据库打交道。比如,用户注册时要把数据保存到数据库里,登录时要从数据库中读取用户信息等等。
但直接使用 JDBC(Java Database Connectivity)来操作数据库是比较麻烦的。我们需要自己写很多重复的代码,比如连接数据库、执行 SQL、处理结果集等。
这时候,MyBatis 就派上用场了。
🧩 简单理解:
MyBatis 是一个 Java 的持久层框架,它的作用是帮助你更方便地操作数据库。你可以把它看作是一个“简化版”的数据库工具箱。
- 它让你可以专注于写 SQL
- 把数据库的操作变得更简单
- 提高开发效率,降低出错率
📌 通俗来说:MyBatis = 让你更轻松地操作数据库
二、环境准备:搭建你的第一个 MyBatis 工程

在开始写代码之前,我们先准备好开发环境。
✅ 所需工具:
- JDK 1.8 或更高版本
- IDEA(推荐 IntelliJ IDEA)
- MySQL 数据库
- Maven(用于依赖管理)
🔧 步骤 1:创建 Maven 工程
打开 IntelliJ IDEA,选择:
File → New → Project → Maven → Next → 输入项目名(如 mybatis-demo)
创建完成后,会生成如下结构:
mybatis-demo/
├── pom.xml
└── src/
└── main/
├── java/
└── resources/
🔧 步骤 2:添加 MyBatis 和 MySQL 驱动依赖
编辑 pom.xml 文件,在 <dependencies> 中添加以下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
📌 Tip:保存后会自动下载相关依赖包。
🔧 步骤 3:配置数据库连接信息
新建文件 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/test_db?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
📌 替换其中的用户名和密码为你自己的 MySQL 账号信息。
三、核心概念:你需要知道的几个关键词

学 MyBatis 不必死记硬背,掌握以下几个关键概念就够了:
1️⃣ SqlSession
这是 MyBatis 最核心的对象之一。
💡 类似于“数据库连接 + 执行器”的组合。你可以通过它来执行 SQL 语句、调用映射器(Mapper)等。
通常我们会这样创建一个 SqlSession:
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
2️⃣ Mapper 接口
这是一个接口,里面定义了你要执行的数据库操作方法。
例如:
public interface UserMapper {
User selectUserById(int id);
}
对应的方法会在 XML 文件中定义具体的 SQL。
3️⃣ Mapper XML
XML 文件中写 SQL,与接口一一对应。
举例: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="selectUserById" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
📌 注意点:
namespace要对应接口的全路径id对应接口中的方法名#{id}是占位符,防止 SQL 注入
4️⃣ POJO(Model)
POJO 是普通的 Java 类,用来映射数据库表的字段。
比如我们有一个 users 表,对应的模型类:
package com.example.model;
public class User {
private int id;
private String name;
private String email;
// Getters and Setters
}
四、实战项目:用 MyBatis 实现一个简单的用户查询功能
我们来做一个小练习,实现根据 ID 查询用户信息的功能。
🚀 步骤 1:创建数据库和表
在 MySQL 中执行以下 SQL:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users(name, email) VALUES ('张三', 'zhangsan@example.com');
🚀 步骤 2:编写 Model 类
package com.example.model;
public class User {
private int id;
private String name;
private String email;
// Getters & Setters
}
🚀 步骤 3:编写 Mapper 接口
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
User selectUserById(int id);
}
🚀 步骤 4:编写 Mapper XML
创建文件 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="selectUserById" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
🚀 步骤 5:编写测试类 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;

public class Main {
public static void main(String[] args) throws IOException {
// 1. 加载配置
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("mybatis-config.xml"));
// 2. 获取 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3. 获取 Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 4. 调用方法
User user = userMapper.selectUserById(1);
System.out.println(user.getName() + " - " + user.getEmail());
// 5. 关闭连接
sqlSession.close();
}
}
✅ 运行后输出:
张三 - zhangsan@example.com
🎉 成功!你已经完成了第一个 MyBatis 示例!
五、常见问题解答(FAQ)

❓ Q1:找不到类/加载不到配置怎么办?
- 确保
mybatis-config.xml在resources目录下 - 包路径是否一致,如 UserMapper 是否被正确扫描到
- 查看控制台是否有报错,按提示解决
❓ Q2:SQL 报错或查询不到数据?
- 检查 SQL 写法是否正确(是否用了反引号、关键字拼写错误)
- 检查数据库是否存在该记录
- 使用日志查看实际执行的 SQL(后续可以引入 Log4j)
❓ Q3:MyBatis 支持哪些类型的数据操作?
- SELECT 查询
- INSERT 插入
- UPDATE 修改
- DELETE 删除
- 存储过程、批量操作也支持
❓ Q4:为什么不用 Hibernate 而要用 MyBatis?
- MyBatis 更加灵活,适合喜欢写 SQL 的开发者
- 可以精细控制性能和 SQL 优化
- 对复杂业务逻辑支持更好
- Hibernate 更适用于快速生成 CRUD 操作
六、学习建议:接下来该怎么进阶?
学会了基础之后,下一步可以:
✅ 学习使用动态 SQL(if、foreach、choose 等标签)
✅ 学习多表关联查询
✅ 学习 PageHelper 实现分页查询
✅ 结合 Spring Boot 使用 MyBatis(主流做法)
✅ 掌握日志集成(如 Log4j)
✅ 自定义 TypeHandler(处理特殊类型的转换)
📌 推荐资源:
- MyBatis 官方文档
- B站视频:《MyBatis 从零开始》
- 推荐书籍:《深入浅出 MyBatis 技术原理与实战》
总结
本文带你从零开始了解并实践了 MyBatis 的基本用法。虽然只是一个小小的起步,但它打开了通往 Java 后端世界的一扇大门。
记住一句话:
“学会 MyBatis,就是掌握了和数据库对话的能力。”
祝你在 Java 开发的路上越走越远!
✅ 下一步你就可以尝试结合 Spring Boot 使用 MyBatis,开启企业级开发之旅啦!

评论 0