MyBatis基础教程:Java持久层框架入门
一、开篇:MyBatis 是什么?为什么我们需要它?

在开发 Java 应用程序时,我们经常需要将数据存入数据库中,比如用户信息、订单记录、商品库存等。而操作数据库往往是一个重复且容易出错的过程。
MyBatis 就是一个用来简化这个过程的工具,它属于“持久层”框架,也就是说,它专门负责处理 Java 和数据库之间的数据交互问题。
1.1 什么是“持久层”?
- 持久层是应用程序架构中的一个层级,主要任务是将数据长期保存(如数据库)和读取。
- 简单来说,就是处理“把 Java 对象写进数据库”和“从数据库查数据生成 Java 对象”。
1.2 为什么选择 MyBatis?
- 不像 Hibernate 那样自动做一切,MyBatis 给你更多控制权。
- 它让你自己写 SQL,更灵活,适合复杂查询或性能优化。
- 学习曲线较平缓,非常适合新手入门。
二、环境准备:搭建你的第一个 MyBatis 项目

我们要使用 Maven + MyBatis + MySQL 来创建一个简单的 Java 项目。
2.1 开发工具准备
你需要以下工具:
- Java JDK(建议使用 Java 8 或以上)
- Maven(构建工具)
- MySQL 数据库(本地安装即可)
- IDE(推荐 IntelliJ IDEA 或 Eclipse)
📝 提示:本文将以 IntelliJ IDEA 为例进行演示。
2.2 创建 Maven 项目
打开 IDEA,新建一个 Maven 工程:
- GroupId 填写
com.example - ArtifactId 填写
mybatis-demo
完成后会自动生成如下结构:
mybatis-demo/
├── pom.xml
└── src/
└── main/
├── java/ ← Java 源代码放这里
└── resources/ ← 配置文件放这里
2.3 引入 MyBatis 的依赖
编辑 pom.xml 文件,在 <dependencies> 标签内加入以下内容:
<!-- MyBatis 核心库 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MySQL JDBC 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
💡 版本号可能有更新,你可以访问 https://mvnrepository.com 查找最新版本。
2.4 安装并配置 MySQL
安装好 MySQL 后,使用命令行或客户端工具创建一个测试数据库和表:
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
添加一条测试数据:
INSERT INTO user (name, email) VALUES ('张三', 'zhangsan@example.com');
三、核心概念:了解 MyBatis 的关键角色

虽然 MyBatis 很轻量,但它有几个非常重要的组成部分,我们来一一介绍:
3.1 Configuration(配置)
这是 MyBatis 的主配置文件,一般命名为 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="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
⚠️ 注意:
- 替换用户名和密码为你自己的 MySQL 登录信息。
- 使用
&替代 URL 中的&字符。
3.2 Mapper(映射器)
Mapper 是 MyBatis 的核心部分,它的作用是把 Java 方法和 SQL 语句对应起来。每个 Mapper 接口都可以理解为对一张数据库表的操作接口。
我们将创建一个 UserMapper.java 接口,用于查询用户数据。
UserMapper.java:
package com.example;
import java.util.List;
public interface UserMapper {
List<User> getAllUsers();
}
3.3 XML 映射文件
每个 Mapper 接口都需要一个对应的 XML 文件来定义 SQL 语句,比如 UserMapper.xml。
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.UserMapper">
<select id="getAllUsers" resultType="com.example.User">
SELECT * FROM user
</select>
</mapper>
3.4 实体类(POJO)
也就是你的 Java 类,代表数据库中的一条数据。例如:
User.java:
package com.example;
public class User {
private int id;
private String name;
private String email;
// Getter & Setter(省略)
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
小结:各组件关系图
| 组件 | 功能 |
|---|---|
| mybatis-config.xml | 全局配置,连接数据库 |
| Mapper 接口 | 定义操作方法(Java) |
| Mapper XML 文件 | 编写 SQL 语句 |
| 实体类(如 User) | 映射数据库字段到 Java 属性 |
四、实战项目:做一个最简单的查询示例

现在我们把这些模块组合起来,实现一个功能:查询所有用户信息并打印出来。
步骤 1:加载配置并获取 SqlSession
MyBatis 通过 SqlSessionFactory 来创建 SqlSession,这是我们与数据库交互的入口点。
创建一个 Java 测试类 TestMain.java:
package com.example;
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 TestMain {
public static void main(String[] args) throws Exception {
// 加载配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取 SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
// 查询所有用户
List<User> users = mapper.getAllUsers();
// 输出结果
for (User user : users) {
System.out.println(user);
}
}
}
}
✅ 确保
mybatis-config.xml和UserMapper.xml都放在src/main/resources目录下。
步骤 2:运行程序
运行 TestMain,如果一切正常,你应该会看到类似输出:
User{id=1, name='张三', email='zhangsan@example.com'}
恭喜!你已经成功完成了一个最简单的 MyBatis 查询示例!
五、常见问题:新手常问的问题解答

5.1 “找不到 UserMapper.xml 怎么办?”
- 确保 XML 文件放在
resources下,并路径一致; - 在
mybatis-config.xml中正确引入该 XML。
5.2 “提示 ‘无效的驱动类’ 如何解决?”
- 可能是 MySQL 驱动版本不兼容;
- 确保 JDBC URL 中使用的是正确的驱动类名:
com.mysql.cj.jdbc.Driver
5.3 “返回 null 而不是对象怎么办?”
- 检查数据库字段名称是否与 Java 类属性名称匹配;
- 如果名字不同,可以使用
<resultMap>或者 SQL 别名映射。
六、学习建议:下一步该学什么?
学会 MyBatis 的基本使用只是开始。接下来你还可以继续学习这些进阶内容:
| 主题 | 内容简要 |
|---|---|
| 插入、更新、删除操作 | 学习 <insert>、<update> 和 <delete> 标签 |
| 参数传递方式 | 如何使用 @Param 注解或 Map 传参 |
| 动态 SQL | if、choose、foreach 等标签的应用 |
| 结果集映射 | 复杂的结果处理,比如一对一、一对多 |
| 注解式开发 | 不用 XML,直接写注解来绑定 SQL |
| 与 Spring 整合 | 实际企业级项目中 MyBatis + Spring 的整合实践 |
结语:MyBatis 入门虽易,但精通仍需功夫

希望这篇通俗易懂的《MyBatis基础教程》能帮助你顺利迈出学习的第一步。记住一句话:
编程不是看出来的,是写出来的!
不要怕出错,多多动手练习才是王道。如果你喜欢这种讲解方式,也可以尝试跟着我一步步深入学习 JavaWeb、SpringBoot 等后端技术哦!
📚 附录:完整目录结构参考
mybatis-demo/
├── pom.xml
└── src/
└── main/
├── java/
│ └── com.example/
│ ├── User.java
│ ├── UserMapper.java
│ └── TestMain.java
└── resources/
├── mybatis-config.xml
└── UserMapper.xml
如有疑问,欢迎留言交流~

评论 0