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

在开发 Java 项目时,我们常常需要和数据库打交道。比如查询用户信息、保存订单数据等。传统的做法是直接使用 JDBC(Java Database Connectivity)来操作数据库,但这种方式写起来代码多、维护困难、容易出错。
MyBatis 是一个轻量级的 Java 持久层框架,它的核心作用就是帮助你更方便地操作数据库。它可以简化数据库访问逻辑,让你专注于业务代码,而不是复杂的 JDBC 操作。
你可以把 MyBatis 想象成一个“翻译官”:
- 它能帮你把 Java 对象翻译成 SQL;
- 同样也能把数据库返回的结果翻译成 Java 对象;
- 不仅如此,它还支持动态 SQL,能根据条件拼接语句。
总之,如果你是一个正在学习 Java Web 开发的新手,MyBatis 是你绕不开的一个重要工具。
环境准备:搭建你的第一个 MyBatis 开发环境

所需软件清单:
- JDK 1.8+
- IDEA 或 Eclipse
- MySQL 数据库
- Maven 构建工具
💡 如果你是初学者,建议使用 IntelliJ IDEA 社区版 + Maven 的方式来构建项目,因为这种组合最为常见且社区资源丰富。
步骤一:创建 Maven 项目
打开 IDEA,选择 File -> New -> Project,然后选择 Maven。
填写 GroupId(组织名,如 com.example)、ArtifactId(项目名,如 mybatis-demo),点击 Finish。
生成的项目结构如下:
mybatis-demo
├── pom.xml
└── src
└── main
├── java
└── resources
步骤二:添加 MyBatis 和 MySQL 依赖
打开 pom.xml 文件,在 <dependencies> 中添加以下内容:
<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.26</version>
</dependency>
<!-- 日志实现(可选,便于调试) -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>
⚠️ 注意:版本号可能会更新,请参考 Maven Central 查询最新版本。
步骤三:配置数据库连接信息
在 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?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
</configuration>
替换其中的数据库地址(url)、用户名(username)和密码(password)为你本地 MySQL 的实际信息。
核心概念:什么是 Mapper、SQL 映射文件、SqlSession?


1. SqlSession
这是 MyBatis 的“执行器”,你可以把它理解为一次与数据库对话的机会(就像你打电话给客服说事)。我们通过它来调用 SQL、获取结果。
2. Mapper 接口
Mapper 是一个普通的 Java 接口,接口中的每个方法都对应一条 SQL 语句。例如:
public interface UserMapper {
User selectUserById(int id);
}
3. SQL 映射文件(XML)
这是一个 XML 文件,用于定义 SQL 语句及其映射关系。比如:
<?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 user WHERE id = #{id}
</select>
</mapper>
namespace是对应哪个接口;id是接口的方法名;resultType是返回值类型(Java 类);#{id}是传入的参数。
4. 如何绑定接口与 SQL?
你需要告诉 MyBatis 哪些 Mapper 接口和哪些 XML 文件匹配。最简单的做法是在 mybatis-config.xml 中增加下面的内容:
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
当然,也可以使用注解的方式,暂时我们先用 XML 实现。
实战项目:完成一个简单用户查询系统
我们将一步步实现一个功能:通过 ID 查询用户信息。
Step 1:创建用户表和测试数据
在你的数据库中运行以下 SQL:
CREATE DATABASE test;
USE test;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
email VARCHAR(255)
);
INSERT INTO user(name, email) VALUES('张三', 'zhangsan@test.com');
Step 2:创建实体类(Java Bean)
在 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 + '\'' +
'}';
}
}
Step 3:编写 Mapper 接口
创建 com.example.mapper.UserMapper.java:
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
User selectUserById(int id);
}
Step 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 user WHERE id = #{id}
</select>
</mapper>
别忘了将这个文件添加进全局配置:
在 mybatis-config.xml 的 <mappers> 中加入:
<mapper resource="mapper/UserMapper.xml"/>
Step 5:编写主程序进行测试
创建测试类 MainTest.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.InputStream;
public class MainTest {
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()) {
// 获取 Mapper 接口的实现类
UserMapper mapper = session.getMapper(UserMapper.class);
// 调用方法查询
User user = mapper.selectUserById(1);
System.out.println(user);
}
}
}
✅ 运行结果应输出类似:
User{id=1, name='张三', email='zhangsan@test.com'}
如果成功了,恭喜你,你已经完成了你的第一个 MyBatis 示例!
常见问题解答
Q1:为什么出现 “找不到驱动类”的错误?
可能原因:
- 没有在
pom.xml中引入 MySQL 驱动; - 数据库配置文件中的 driver 写错了;
- MySQL 服务没有启动;
解决方法:
- 确认依赖是否引入;
- 检查配置文件中的 driver 是否是:
com.mysql.cj.jdbc.Driver; - 使用命令行登录 MySQL 测试能否连接成功:
mysql -u root -p
Q2:SQL 映射文件无法加载?
可能原因:
- XML 文件路径不正确;
<mapper>标签中的路径未设置;- IDE 未将 XML 文件放入编译目录;
解决方法:
- 确保 XML 文件放在
resources/mapper/目录; - 确认
mybatis-config.xml中是否有正确的<mapper>标签; - 若使用 Maven,默认会自动处理资源文件,无需额外配置。
Q3:返回的对象字段为 null?
可能原因:
- 表字段名称与 Java 属性名不一致;
- 未正确指定
resultType; - 未使用驼峰命名法导致属性匹配失败;
解决方法:
- 查看 SQL 是否正确,字段是否映射;
- 可尝试使用别名或 ResultMap 来显式映射字段;
- 确保 Java 属性名与数据库字段符合规范(如数据库字段是 create_time,则 Java 写 createTime)。
学习建议:下一步该学什么?

掌握 MyBatis 的基本使用后,可以沿着以下几个方向继续深入学习:
方向一:学习 MyBatis 注解方式
除了 XML,MyBatis 也支持使用注解来编写 SQL,适合一些小而精的项目。
示例:
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(int id);
方向二:了解 ResultMap 的使用
当你发现字段名和类属性名不一致时,可以通过 <resultMap> 显式映射它们。
方向三:结合 Spring 使用 MyBatis
很多企业项目中,MyBatis 往往是和 Spring 一起使用的。你可以学习:
- MyBatis 与 Spring 整合;
- Mapper 自动注入;
- 动态代理机制;
- 事务管理等内容。
方向四:尝试动态 SQL
MyBatis 支持非常强大的动态 SQL 功能,比如 <if>、<choose>、<foreach>,可以让你在一个 XML 中写出不同条件下的 SQL。
结语:坚持实践,你就能掌握 MyBatis!
本教程从环境搭建到实战项目都给出了完整的代码和步骤,只要你跟着敲一遍,并理解其原理,相信你就可以独立使用 MyBatis 来完成小型项目的数据库操作了。
记住一句话:“编程不是看懂就行,而是要动手练出来”。
祝你在学习 Java 和 MyBatis 的道路上越走越远!💡
🎯 练习建议:
- 尝试新增一个“查询所有用户”的接口;
- 编写插入用户的方法;
- 继续扩展为一个完整的增删改查项目。
如果你遇到任何疑问,欢迎随时提问!

评论 0