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

在开发Java程序时,我们经常会用到数据库来保存和查询数据。例如,用户注册的信息需要存入数据库中,登录的时候又要从数据库中查出来进行验证。
传统的做法是直接使用JDBC(Java Database Connectivity)与数据库交互,但这种方式代码量大、重复性强、维护困难。为了简化这一过程,MyBatis 出现了。
1.1 通俗解释什么是MyBatis
你可以把 MyBatis 想象成一个“中间人”,它的任务就是帮你在 Java 程序和数据库之间传话。你告诉它要执行哪条 SQL 语句,它就把结果返回给你;或者你要插入一条数据,它也能帮你完成。
与Hibernate等“全自动”ORM框架不同的是,MyBatis 是一个半自动化的 ORM 框架:
- ORM = Object Relational Mapping(对象关系映射),意思是可以把数据库的表变成 Java 对象来操作。
- 半自动化意味着你需要自己写SQL语句,而不是完全由框架自动生成,这样更加灵活可控。
📌 小贴士:初学建议选择 MyBatis,因为它可以让你更清楚理解数据库与Java之间的交互过程。
二、环境准备:搭建MyBatis开发环境

在开始编程之前,我们先准备好开发环境。
2.1 所需工具
- JDK 8+
- IDE:推荐 IntelliJ IDEA 或 Eclipse
- Maven(构建项目依赖)
- MySQL 数据库(也可以用其他数据库如PostgreSQL)
- 数据库管理工具:如 Navicat 或 DBeaver(非必须)
2.2 创建Maven项目
如果你不太熟悉Maven,也没关系。这里只讲怎么快速添加MyBatis依赖。
打开IDEA创建Maven项目后,在 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.30</version>
</dependency>
<!-- 日志库 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
2.3 配置数据库连接信息
新建一个名为 mybatis-config.xml 的配置文件,放在 resources 目录下:
<?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="yourpassword"/>
</dataSource>
</environment>
</environments>
</configuration>
注意修改数据库地址(url)、用户名(username)和密码(password)为你自己的数据库设置。
三、核心概念讲解:这些术语到底是啥?

在学习具体操作前,先了解几个关键概念:
3.1 SqlSessionFactory 和 SqlSession
这两个是 MyBatis 最基本的对象:
- SqlSessionFactory:它是 MyBatis 工厂类,用来生成 SqlSession。
- SqlSession:它就相当于数据库的连接会话,通过它可以执行 SQL 语句、提交事务等。
简单记忆:
工厂造会话,会话去干活。
代码示例:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
3.2 Mapper 映射器
这是 MyBatis 中非常重要的东西。它负责把 Java 接口的方法名和 SQL 语句对应起来。
举个例子:
- 接口方法:
User getUserById(int id) - SQL:
SELECT * FROM user WHERE id = #{id}
Mapper 可以是一个接口 + XML 文件,也可以是使用注解写的接口。
四、实战项目:用MyBatis做一个小案例
我们现在来动手实现一个简单的功能:根据用户ID查询用户信息。
4.1 步骤一:建一张测试表
先在MySQL中执行如下建表语句:
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
INSERT INTO user (name, age) VALUES ('张三', 20), ('李四', 25);
4.2 步骤二:创建对应的Java实体类
新建一个 User.java 类:
public class User {
private int id;
private String name;
private int age;
// 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 int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
4.3 步骤三:编写Mapper接口和XML映射文件
创建接口:UserMapper.java
public interface UserMapper {
User getUserById(int id);
}
创建映射文件:UserMapper.xml(放在 resources 目录下的某个包里,如 mapper/)
<?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="UserMapper">
<select id="getUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
注意:
namespace要等于接口全名,resultType是返回值类型。
4.4 步骤四:在主程序中调用
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()) {
// 获取 Mapper 接口实例
UserMapper mapper = session.getMapper(UserMapper.class);
// 查询 ID 为 1 的用户
User user = mapper.getUserById(1);
System.out.println(user);
}
}
}
运行这个程序,如果一切正常,你应该会看到控制台输出:
User{id=1, name='张三', age=20}
✅ 到此为止,你已经完成了第一个MyBatis的小项目!
五、常见问题解答(FAQ)
刚学的同学常常会有以下疑问:
5.1 Q:报错找不到 Mapper 文件怎么办?
A:检查三点:
mybatis-config.xml中有没有正确引入 Mapper XML 文件:<mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers>- 文件路径是否正确
namespace是否和接口一致
5.2 Q:为什么不用自己写JDBC连接代码了?
A:因为 MyBatis 内部已经封装好了数据库连接池和JDBC操作,只需要告诉它怎么连数据库即可。
5.3 Q:参数 #{id} 和 ${id} 有什么区别?
A:
#{id}是安全的,MyBatis 会自动防止 SQL 注入攻击${id}是字符串替换,不安全,容易引发注入漏洞,慎用!
六、学习建议:下一步怎么学?
恭喜你完成了MyBatis的基础学习!接下来建议你继续学习:
- ✅ 增删改操作(Insert / Update / Delete)
- ✅ 使用动态SQL(如
<if><foreach>) - ✅ 学习如何使用注解代替XML配置
- ✅ 整合Spring Boot使用MyBatis
- 📘 阅读官方文档 https://mybatis.org/mybatis-3/zh/index.html

总结
本篇《MyBatis基础教程》面向零基础同学,详细讲解了:
- MyBatis是什么,能解决什么问题
- 如何搭建开发环境并连接数据库
- 核心概念的理解(SqlSession、Mapper)
- 实战一个小项目:查询用户信息
- 遇到常见问题怎么办
- 下一步学习路线建议
只要你多敲代码、勤练习,很快就能熟练掌握MyBatis,并将其应用到实际项目中!
🚀 继续努力,祝你早日成为Java开发高手!

评论 0