MyBatis基础教程:Java持久层框架入门
开篇:MyBatis是什么?它能帮你做什么?

你有没有遇到过这样的问题?在写Java程序的时候,你想把数据保存到数据库里,但写SQL语句、处理结果集特别麻烦,而且容易出错。
这时候,一个叫 MyBatis 的工具就可以帮助你了。MyBatis 是一个非常流行的 Java 持久层框架,它的作用是简化 Java 与数据库之间的交互。
简单点说:
- 如果你用原生 JDBC 写 SQL、处理参数和结果,那可能会很繁琐。
- 而 MyBatis 帮你把这些“脏活累活”包装起来,让你用更少的代码完成更多的事情。
它有什么特点?
| 特点 | 说明 |
|---|---|
| 灵活性高 | 所有 SQL 都是你自己写的,完全掌控 |
| 易于集成 | 很容易和 Spring、Spring Boot 结合使用 |
| 映射机制 | 可以将数据库查询结果自动映射成 Java 对象 |
| 学习成本低 | 入门快,适合初学者上手 |
现在我们就开始一步一步从零学起吧!
第一步:环境准备

在开始使用 MyBatis 之前,你需要准备好开发环境。我们这里选择的是最基础也最常见的组合:
- JDK(Java Development Kit)1.8 或以上
- MySQL 数据库
- IntelliJ IDEA(IDE)
- Maven(项目构建工具)
步骤一:安装 JDK 并配置环境变量
略(假设你已经装好 Java,可以通过 java -version 检查)
步骤二:安装 MySQL 并创建测试数据库
下载 MySQL 社区版并安装:https://dev.mysql.com/downloads/installer/
安装完成后,使用命令行或图形化工具创建一个测试数据库:
CREATE DATABASE mybatis_demo;
再建一张简单的用户表:
USE mybatis_demo;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
步骤三:安装 IntelliJ IDEA 并新建 Maven 项目
打开 IDEA:
- 选择 "Create New Project"
- 选择 Maven,勾选 Create from archetype,然后点击下一步
- 输入 GroupId(比如 com.example)
- ArtifactId(比如 mybatis-tutorial)
- 点击 finish 创建项目
步骤四:添加 MyBatis 和数据库驱动依赖
打开 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.26</version>
</dependency>
注意版本号要与你的环境匹配。
小结一下
现在你已经:
✅ 安装了 JDK
✅ 安装了 MySQL 并创建了数据库和表
✅ 使用 IntelliJ 创建了一个 Maven 项目
✅ 引入了 MyBatis 和 MySQL 的依赖
接下来,就是真正开始写代码啦!
第二步:理解 MyBatis 的核心概念

为了让你更容易理解 MyBatis,我们先来了解几个关键术语:
核心概念一:SqlSession
这是 MyBatis 中操作数据库的核心对象,你可以把它想象成一个会话窗口。通过这个窗口,你可以执行增删改查等所有操作。
核心概念二:Mapper 接口 & XML
Mapper 接口是一个 Java 接口,里面定义了你要调用的方法,比如 “根据ID查询用户”;
对应还有一个 Mapper XML 文件,里面有对应的 SQL 语句。
MyBatis 把接口方法和 XML 中的 SQL 绑定在一起,这样你就可以直接通过接口调用数据库操作了。
核心概念三:Configuration 配置文件
这个是 MyBatis 的主配置文件,通常叫做 mybatis-config.xml,在里面可以配置数据库连接信息、别名、插件等等。
核心概念四:POJO 实体类
POJO(Plain Old Java Object)是用来映射数据库记录的 Java 类。例如一个 User 类,属性跟 user 表字段一一对应。
这些概念听起来有点抽象?没关系!接下来我们在实战项目中一一解释。
第三步:动手做一个小项目 —— 用户管理功能

目标:实现一个简单的 Java 应用,能够对数据库中的 user 表进行插入和查询。
第1步:创建实体类 User.java
在 src/main/java/com/example 下创建包结构,如 com.example.entity,然后新建类 User.java:
package com.example.entity;
public class User {
private Integer id;
private String name;
private String email;
// Getter and Setter 方法
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
}
第2步:编写 UserMapper 接口
创建一个新的包,如 com.example.mapper,然后新建接口:
package com.example.mapper;
import com.example.entity.User;
import java.util.List;
public interface UserMapper {
List<User> getAllUsers();
User getUserById(int id);
void insertUser(User user);
}
第3步:创建 UserMapper.xml
在 src/main/resources 目录下创建一个文件夹:mappers,并在该目录下创建 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="getAllUsers" resultType="com.example.entity.User">
SELECT * FROM user
</select>
<!-- 查询指定id的用户 -->
<select id="getUserById" parameterType="int" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 插入新用户 -->
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO user (name, email) VALUES (#{name}, #{email})
</insert>
</mapper>
第4步:创建 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/mybatis_demo?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/> <!-- 修改为你自己的密码 -->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
⚠️ 注意:请确认数据库用户名、密码、数据库名是否正确
第5步:编写主函数运行测试
在 src/main/java/com/example 包下新建类 MainApp.java:
package com.example;
import com.example.entity.User;
import com.example.mapper.UserMapper;
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 MainApp {
public static void main(String[] args) throws IOException {
// 加载 mybatis 配置文件
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 = new User();
user.setName("Tom");
user.setEmail("tom@example.com");
mapper.insertUser(user);
session.commit(); // 提交事务
System.out.println("插入成功");
// 查询所有用户
List<User> users = mapper.getAllUsers();
for (User u : users) {
System.out.println("ID:" + u.getId() + ", 名字:" + u.getName() + ", 邮箱:" + u.getEmail());
}

// 查询某个用户
User tom = mapper.getUserById(1);
System.out.println("查到用户:" + tom.getName());
}
}
}
运行项目验证
在 IDEA 中运行 MainApp,你应该可以看到控制台输出类似如下内容:
插入成功
ID:1, 名字:Tom, 邮箱:tom@example.com
查到用户:Tom
恭喜你!你已经完成了第一个 MyBatis 示例!
新手常见问题解答
Q1:为什么我运行时提示找不到 mapper.xml 文件?
A:检查 XML 是否放在 resources/mappers 目录下,且在 mybatis-config.xml 中是否被正确引用。
Q2:报错提示 "Could not find resource"
A:路径可能不对。确保 resource 属性值和文件位置一致,比如:
<mapper resource="mappers/UserMapper.xml"/>
XML 文件应该在 resources/mappers/ 路径下。
Q3:为什么不能插入数据?没有任何报错但数据没进库?
A:记得手动提交事务!使用 session.commit() 来提交事务,否则数据不会保存。
Q4:如何调试 SQL 语句?
A:可以在 logback.xml 或 log4j.xml 中开启日志输出。也可以在 IDE 控制台查看生成的 SQL。
Q5:为什么 getMapper 总返回 null?
A:检查你的 Mapper 接口全限定名和 XML 的 namespace 是否一致,比如:
com.example.mapper.UserMapper
XML 中:
<mapper namespace="com.example.mapper.UserMapper">
下一步学习建议
你已经掌握了 MyBatis 最基本的使用方法。接下来可以从以下几个方向深入学习:
| 方向 | 内容 |
|---|---|
| 动态 SQL | 学习 if、choose、where、set、foreach 等标签的使用 |
| 复杂映射 | 处理一对一、一对多等关联查询 |
| 注解开发 | 用注解方式代替 XML,更加简洁 |
| 日志集成 | 集成 Log4j2 / Slf4j 查看执行日志 |
| 缓存机制 | 学习一级缓存、二级缓存 |
| 整合 Spring Boot | 进阶知识,让 MyBatis 更易于维护和使用 |
小结
在这篇教程中,我们从零开始,带你一步步搭建 MyBatis 环境,并完成了一个简单的数据库操作示例。你已经学会:
- 理解 MyBatis 的主要作用
- 搭建开发环境并引入依赖
- 编写实体类、Mapper 接口及 XML 文件
- 编写主程序运行数据库操作
- 解决一些常见的错误
MyBatis 是 Java 开发者必备技能之一,掌握它之后,你会发现自己在做数据库操作时更加得心应手!
如果你觉得这篇文章对你有所帮助,欢迎点赞、收藏或者转发给需要的朋友。如果你有任何疑问或想要继续学习的内容,欢迎留言讨论 😊

评论 0