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

在Java Web开发中,经常需要与数据库打交道。我们写的代码要能够保存数据、查询数据、修改数据和删除数据,这些操作统称为CRUD(创建、读取、更新、删除)。
过去,我们需要手动编写大量的JDBC代码来连接数据库,并且还要处理结果集的解析。不仅写起来麻烦,还不容易维护。于是,人们开发了各种ORM框架来帮助简化这个过程。
🌟什么是MyBatis?
MyBatis是一个优秀的持久层框架(Persistence Framework),主要用于帮助Java程序操作数据库。它的核心思想是:
- 让开发者专注于SQL语句的编写;
- 将执行结果自动映射为Java对象;
- 避免重复的JDBC底层操作(如连接管理、异常处理等)。
💡小贴士: ORM全称Object Relational Mapping,即对象关系映射,就是把数据库中的表结构,自动转成Java类的属性。
🔧为什么选择MyBatis?
- 比较轻量级,学习成本低;
- 可以灵活控制SQL语句;
- 不强制使用某种设计模式,自由度高;
- 非常适合对SQL有较高要求的项目。
接下来,我们就从零开始,带你一步步上手MyBatis!
二、环境准备:搭建你的第一个MyBatis项目

要使用MyBatis,我们需要准备好以下几样东西:
✅1. Java开发环境(JDK)
推荐安装 JDK 17 或以上版本。确保你能在命令行中运行以下命令看到版本号:
java -version
如果没有安装,可以从Oracle官网下载安装包。
✅2. 数据库(MySQL示例)
我们用常见的MySQL作为演示数据库。你可以选择安装本地MySQL,或者使用Docker快速启动。
安装完成后,创建一个简单的数据库用于练习:
CREATE DATABASE mybatis_demo;
USE mybatis_demo;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
插入一些测试数据:
INSERT INTO users (name, email) VALUES ('Tom', 'tom@example.com');
INSERT INTO users (name, email) VALUES ('Jerry', 'jerry@example.com');
✅3. IDE(推荐使用 IntelliJ IDEA)
IntelliJ IDEA是目前最流行的Java开发工具,社区版完全免费。你可以从官网下载安装。
✅4. 构建工具:Maven
我们将使用Maven来管理依赖和构建项目。如果你不会Maven也没关系,只要按下面步骤操作即可。
✅5. 创建Maven项目
在IDEA中创建一个新的Maven项目:
- 打开IDEA → File → New → Project
- 选择 Maven → Create from archetype
- 选择
maven-archetype-quickstart - 输入 GroupId(比如
com.example)、ArtifactId(比如mybatis-demo) - 完成创建
✅6. 添加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.28</version>
</dependency>
⚠️注意:如果使用MySQL 8.0,请确保JDBC驱动版本也匹配。
保存后IDE会自动下载相关jar包。
✅7. 准备MyBatis配置文件
在 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_here"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
请根据你自己的数据库信息修改用户名、密码和URL。
三、核心概念讲解:MyBatis中的关键组成部分

为了更好地理解MyBatis的工作原理,我们需要了解几个核心概念:
| 组件 | 作用 |
|---|---|
SqlSessionFactory |
MyBatis的入口,用于创建数据库会话对象 |
SqlSession |
数据库会话对象,用来发送SQL并获取结果 |
Mapper接口 |
接口方法对应一条SQL语句 |
XML映射文件 |
描述SQL语句及其结果映射规则 |
💡简单说:MyBatis通过接口定义方法名,然后通过XML或注解实现具体SQL逻辑。
1️⃣ 创建Java实体类
我们在 src/main/java/com/example 下新建一个 User.java 类:
package com.example;
public class User {
private int id;
private String name;
private String email;
// Getter 和 Setter 方法(略)
// 可以右键 Generate → Getter and Setter 自动生成
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
2️⃣ 创建Mapper接口
在 src/main/java/com/example 下创建接口 UserMapper.java:
package com.example;
import java.util.List;
public interface UserMapper {
List<User> selectAllUsers();
}
这个接口只是一个模板,还没有实际功能,真正的SQL要写在XML里。
3️⃣ 创建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.UserMapper">
<select id="selectAllUsers" resultType="com.example.User">
SELECT * FROM users
</select>
</mapper>
namespace必须和对应的Mapper接口路径一致resultType表示返回的数据类型,这里是我们定义的User类
四、实战项目:用MyBatis查询数据库中的用户信息

现在我们要写一个完整的主程序,使用上面定义的接口查询所有用户。
步骤1:读取配置文件,获取SqlSessionFactory
package com.example;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class MyBatisApp {
public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 后续代码在这里
}
}
步骤2:打开SqlSession,调用Mapper接口
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> userList = mapper.selectAllUsers();
for (User user : userList) {
System.out.println(user);
}
}
完整main方法如下:
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 mapper = session.getMapper(UserMapper.class);
List<User> userList = mapper.selectAllUsers();
for (User user : userList) {
System.out.println(user);
}
}
}
输出结果示意:
User{id=1, name='Tom', email='tom@example.com'}
User{id=2, name='Jerry', email='jerry@example.com'}
恭喜你!你已经完成了第一个MyBatis应用!
五、常见问题解答(FAQ)
❓1. 运行时提示“无法加载驱动”?
答: 确保MySQL驱动已正确添加到 pom.xml 中,并重新刷新Maven依赖。同时检查 mybatis-config.xml 中的 driver 是否为 com.mysql.cj.jdbc.Driver(MySQL 8+)。
❓2. 查询结果为空,但数据库里明明有数据?
答: 先确认SQL是否正确,可以在Navicat等客户端里直接运行SQL验证;其次是字段名与Java类的属性名是否一致,例如数据库字段 user_name 与Java字段 userName 要一致,或者在XML中使用别名映射。
❓3. 报错:“mapper interface is not known to the MyBatis system.”?
答: 检查 mybatis-config.xml 中的 <mappers> 配置是否正确指向了你的XML文件,以及XML中的 namespace 是否与接口路径完全一致。
❓4. 使用MyBatis一定要写XML吗?
答: 不一定!MyBatis支持使用注解来替代XML文件。例如:
@Select("SELECT * FROM users")
List<User> selectAllUsers();
不过对于复杂SQL,还是建议使用XML更清晰。
六、下一步学习建议
现在你已经掌握了MyBatis的基本用法,包括:
- 如何连接数据库
- 如何定义Mapper接口和XML文件
- 如何执行SQL并获取结果对象
接下来你可以继续深入学习以下几个方向:
🔹1. 学习MyBatis动态SQL
掌握 <if>、<foreach>、<choose> 等标签,实现更智能的SQL拼接。
🔹2. 学习MyBatis缓存机制
包括一级缓存(SqlSession级别)、二级缓存(Mapper级别),提高性能。
🔹3. 结合Spring Boot使用MyBatis
在企业级开发中,通常将MyBatis与Spring Boot集成使用,更加方便快捷。
🔹4. 多数据源切换与事务管理
学会在一个项目中使用多个数据库,以及如何开启事务控制。
总结
本教程从零开始带你一步一步搭建MyBatis环境,解释了核心概念并通过一个简单的查询项目进行实践。希望你能感受到MyBatis的简洁与强大。随着不断实践,你也会越来越熟练地使用它处理各种数据库操作。
💬新手提醒:不要急着记太多概念,先动手敲一遍代码,感受流程才是最重要的!
文末小彩蛋 🎁
📘推荐阅读文档:
- MyBatis官方中文文档
- 《深入浅出MyBatis技术原理与实战》 —— 林玲著(适合进阶)
祝你学有所成,码出精彩人生!🚀

评论 0