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

1.1 数据库访问的“麻烦事儿”
在开发Java Web项目时,我们常常需要和数据库打交道。比如,一个用户注册功能,就要把用户的账号、密码等信息存入数据库;登录时又要从数据库中查找对应的用户数据。
传统的方式是使用JDBC(Java Database Connectivity),直接写SQL语句去操作数据库,比如下面这段代码:
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE id=1");
这种方式虽然可行,但有很多繁琐的问题:
- 每次都要手动建立连接、处理异常;
- SQL语句写在Java代码里,难以维护;
- 查询结果需要手动封装成对象;
- 不利于复用代码。
这些问题都会增加项目的开发难度和维护成本。
1.2 MyBatis登场:让数据库操作更简单
于是,就有了像MyBatis这样的“中间工具”,来帮助我们简化数据库的操作流程。
MyBatis 是什么?
MyBatis 是一个 Java 的持久层框架,它的核心作用是帮助开发者轻松地实现与数据库之间的交互,而不需要每次都手动写一堆底层的 JDBC 操作。
你可以理解为它是这样一个“翻译官”角色:
- 你只需要告诉它“我要执行哪条SQL语句”;
- 它自动帮你完成数据库连接、参数设置、查询执行、结果封装等步骤;
- 同时还能将数据库的返回结果直接变成 Java 对象,方便后续使用。
1.3 学会 MyBatis 能做什么?
- 快速连接数据库并增删改查数据;
- 让业务逻辑与数据库操作分离,提高代码可维护性;
- 提高开发效率,让你专注于业务逻辑而非底层细节。
二、环境准备:快速搭建你的第一个 MyBatis 开发环境

要开始学习 MyBatis,我们需要搭建以下几样东西:
2.1 安装 Java 环境
确保你已经安装了 JDK(Java Development Kit),推荐版本是 JDK 8 或以上。
可以通过命令行输入以下命令来检查是否安装成功:
java -version
javac -version
如果看到类似输出说明安装成功:
java version "17.0.5" 2022-10-18 LTS
2.2 安装 IDE:推荐 IntelliJ IDEA
IntelliJ IDEA 是目前最流行的 Java 开发工具之一,社区版免费可用。
下载地址:https://www.jetbrains.com/idea/download
安装完成后打开,创建一个新的 Java Maven 项目即可。
2.3 安装 MySQL 数据库
MySQL 是一个常见的关系型数据库系统,非常适合初学者练习使用。
- 下载安装包:https://dev.mysql.com/downloads/mysql/
- 推荐安装 MySQL 8.0 版本
- 安装时建议开启服务自启动,并记住数据库用户名和密码
测试是否安装成功,可以运行下面的命令:
mysql -u root -p
输入正确密码后会进入 MySQL 控制台,说明安装没问题。
2.4 添加 MyBatis 依赖到 Maven 项目
我们使用 Maven 来管理 Java 项目的依赖包。在 pom.xml 文件中加入 MyBatis 和 MySQL 驱动的依赖:
<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.30</version>
</dependency>
</dependencies>
保存文件,Maven 会自动下载所需依赖包。
三、核心概念:MyBatis 中的那些“关键角色”
3.1 Mapper:我的“映射地图”
Mapper 是 MyBatis 中非常重要的一个概念,它就像是一个“地图”,告诉我们如何把数据库的结果映射成 Java 对象。
示例:一个用户表 User 对应的 Mapper 接口
假设我们有一个 user 表,包含字段 id, username, email。
我们可以定义一个接口 UserMapper:
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(int id);
}
这里的 @Select 注解表示这是一个查询操作,后面的 SQL 就是我们要执行的查询语句。
3.2 XML 映射文件:让 SQL 更集中
除了使用注解的方式,还可以通过编写 XML 文件来配置 SQL 语句。
创建文件 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="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM user
</select>
</mapper>
这个 XML 文件的作用是替代上面的接口注解方式,适合复杂 SQL 或多个查询的场景。
3.3 SqlSession:数据库连接的“桥梁”
SqlSession 相当于一个“通道”,你可以通过它拿到 Mapper 接口的实现类,并执行 SQL。
通常我们会使用如下方式获取 SqlSession:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectById(1);
System.out.println(user.getUsername());
} finally {
sqlSession.close();
}
3.4 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/testdb?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
四、实战项目:一步步实现用户信息查询
我们来做个简单的实战项目,目标是:通过 MyBatis 查询出所有用户的信息并显示出来。
4.1 步骤一:创建数据库和用户表
首先,我们先在 MySQL 中创建一个数据库和用户表。
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO user (username, email) VALUES
('tom', 'tom@example.com'),
('jerry', 'jerry@example.com');
4.2 步骤二:创建 Java 实体类
新建一个实体类 User.java:
public class User {
private int id;
private String username;
private String email;
// getter and setter
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
'}';
}
}
4.3 步骤三:创建 Mapper 接口和 XML
接口文件 UserMapper.java
public interface UserMapper {
List<User> selectAllUsers();
}
XML 文件 UserMapper.xml
<select id="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM user
</select>
4.4 步骤四:调用 MyBatis 查询数据
编写主程序入口类 MainApp.java:
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 MainApp {
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 userMapper = session.getMapper(UserMapper.class);
List<User> users = userMapper.selectAllUsers();
for (User user : users) {
System.out.println(user);
}
}
}
}
4.5 运行结果展示
当你运行这个程序时,控制台应该输出类似如下内容:
User{id=1, username='tom', email='tom@example.com'}
User{id=2, username='jerry', email='jerry@example.com'}
这说明你已经成功通过 MyBatis 读取到了数据库中的用户信息!
五、常见问题解答
❓问题 1:报错提示 “无效的驱动类名 com.mysql.jdbc.Driver” 怎么办?
✅答:这是因为使用的 MySQL 驱动版本问题。
- 如果你使用的是 MySQL 8.x,请将驱动类改为
com.mysql.cj.jdbc.Driver - 并且 URL 地址加上
serverTimezone=UTC参数:
url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC
❓问题 2:MyBatis 查询返回空对象或 null?
✅答:可能的原因有几个:
- 数据库字段名与 Java 类属性不一致
- 使用了没有
getter/setter方法的类 - XML 中
resultType写错了路径或者类型 - 数据库中确实没有数据
可以检查这些地方并逐一排除。
❓问题 3:如何调试 MyBatis 执行的 SQL 语句?
✅答:可以在 mybatis-config.xml 中启用日志记录功能:
<settings>
<setting name="log4j2" value="true"/>
</settings>
然后添加 Log4j2 依赖,在控制台就能看到执行的 SQL 语句了。
六、学习建议:下一步该学什么?
恭喜你完成了 MyBatis 的第一个小项目!接下来可以继续深入学习这些内容:
✅ 基础进阶
- 动态 SQL(if / foreach / choose)
- 多表关联查询与结果映射
- 使用注解代替 XML
- 事务管理(commit / rollback)
📚 推荐书籍和文档
- 官方文档:https://mybatis.org/mybatis-3/zh-cn/index.html
- 《MyBatis 从入门到精通》 by 黄文吉
🧪 综合实战建议
尝试做一个完整的 CRUD(增删改查)管理系统:
- 用户注册
- 商品管理
- 订单查询
总结
通过本文的学习,你应该掌握了:
- MyBatis 是什么,为什么它能简化数据库操作;
- 如何搭建本地开发环境;
- MyBatis 的核心组件及它们之间的关系;
- 编写第一个基于 MyBatis 的 Java 程序;
- 遇到问题时该如何排查解决。
如果你是完全的新手,不妨跟着文中实例多练习几遍,熟练掌握之后就可以着手做一些小型的数据库项目了!
希望这篇通俗易懂的《MyBatis基础教程》对你有所帮助,加油!🚀

评论 0