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

在Java开发中,我们经常需要和数据库打交道。比如保存用户注册信息、读取商品库存、更新订单状态等。传统的做法是使用JDBC(Java Database Connectivity)来操作数据库,虽然可行,但写起来很繁琐。
这时候,MyBatis就派上用场了。它是一个轻量级的Java持久层框架,简单来说,就是帮助你更方便地连接数据库并进行数据操作,同时又保留对SQL语句的控制权。
MyBatis的特点:
- 简化数据库操作
- 不强制ORM(对象关系映射),适合喜欢写SQL的人
- 支持动态SQL
- 轻量、易集成到Spring等主流框架中
如果你是初学者,可以把MyBatis理解为“帮你少写很多重复代码”的工具包。下面我们就从环境搭建开始一步步学习它吧!
二、环境准备:搭建你的第一个MyBatis项目

所需工具清单:
| 工具 | 说明 |
|---|---|
| JDK 1.8+ | Java运行环境 |
| IDE | 推荐使用IntelliJ IDEA或Eclipse |
| Maven | 用于管理依赖 |
| MySQL 5.7+ | 数据库服务器 |
| MyBatis依赖 | 在pom.xml中添加即可 |
步骤1:创建Maven项目
打开IDEA → New Project → Maven → 勾选Create from archetype → 选择maven-archetype-quickstart → 填写GroupId(如com.example)、ArtifactId(如mybatis-demo)
生成后的结构如下:
mybatis-demo/
├── pom.xml
└── src
├── main
│ └── java
└── test
└── java
步骤2:配置pom.xml添加MyBatis和MySQL驱动依赖
<!-- 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>
<!-- 日志打印(可选) -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
步骤3:配置MyBatis全局配置文件 mybatis-config.xml
在 resources 文件夹下新建 mybatis-config.xml:
<!-- 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/testdb?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 关联Mapper文件 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>

确保你已经创建了一个名为testdb的数据库,并创建了一个简单的表:
-- SQL
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100)
);
插入一条测试数据:
INSERT INTO user(name, email) VALUES('张三', 'zhangsan@example.com');
三、核心概念讲解:MyBatis的三个关键词
1. SqlSessionFactory(会话工厂)
可以理解为一个生产“数据库连接”的工厂。有了它,才能执行SQL语句。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2. SqlSession(会话)
相当于一次数据库连接,在这个连接里你可以执行各种SQL语句:
try (SqlSession session = sqlSessionFactory.openSession()) {
// 操作数据库在这里进行
}
3. Mapper接口与XML文件
这是MyBatis最核心的概念之一。你可以定义一个接口(如UserMapper.java),然后在对应的XML文件(UserMapper.xml)中写SQL语句,通过绑定的方式来调用。
例如:
// UserMapper.java
public interface UserMapper {
User selectUser(int id);
}
<!-- mappers/UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUser" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
这样我们就可以直接用接口调用SQL:
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(1);
System.out.println(user.getName());
四、实战项目:用MyBatis完成CRUD
我们以一个简单的“用户管理系统”为例,演示如何使用MyBatis完成基本的数据增删改查操作。
步骤1:创建实体类 User.java
package com.example.model;
public class User {
private int id;
private String name;
private String email;
// getter / setter / toString
}
步骤2:编写Mapper接口 UserMapper.java
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
List<User> selectAllUsers();
User selectUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
步骤3:编写Mapper XML文件 UserMapper.xml
<!-- mappers/UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM user
</select>
<select id="selectUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO user(name, email)
VALUES (#{name}, #{email})
</insert>
<update id="updateUser">
UPDATE user SET name=#{name}, email=#{email} WHERE id=#{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id=#{id}
</delete>
</mapper>
步骤4:编写主程序 TestMyBatis.java
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;
import java.util.List;
public class TestMyBatis {
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> users = mapper.selectAllUsers();
for (User u : users) {
System.out.println(u);
}
// 插入新用户
User newUser = new User();
newUser.setName("李四");
newUser.setEmail("lisi@example.com");
mapper.insertUser(newUser);
session.commit(); // 注意:记得提交事务
}
}
}
运行后,你应该能在数据库中看到新增的“李四”。
五、常见问题解答
Q1:MyBatis为什么不用自动映射字段名?
答:为了灵活性。有些字段可能和Java属性不同名,或者需要自定义处理逻辑。当然也支持自动映射,加上 <mapUnderscoreToCamelCase>true</mapUnderscoreToCamelCase> 即可。
Q2:为何不使用Hibernate而选择MyBatis?
答:MyBatis更适合那些希望掌控SQL语句、追求性能优化的团队;Hibernate则更适合完全ORM场景。
Q3:插入数据后获取主键值怎么办?
答:可以用 <selectKey> 或者设置 useGeneratedKeys 和 keyProperty:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user(name, email) VALUES (#{name}, #{email})
</insert>
Q4:MyBatis是否必须使用XML写SQL?
答:不是。也支持使用注解方式写SQL,适合简单查询,但复杂SQL推荐XML。
六、学习建议:下一步学什么?
恭喜你完成了第一个MyBatis项目!接下来可以按以下路径继续学习:
第一阶段:掌握进阶功能
- 动态SQL(if、choose、foreach)
- 结果集映射(resultMap)
- 注解式编程(@Select/@Update等)
- 缓存机制(一级/二级缓存)
第二阶段:整合Spring和Spring Boot
- 整合Spring使用MyBatis-Spring模块
- 使用Spring Boot + MyBatis Starter简化配置
- 实践RESTful API开发
第三阶段:企业级项目实践
- 使用PageHelper实现分页
- MyBatis Generator自动生成代码
- MyBatis Plus增强功能
- 与Spring Security结合做权限控制
总结

本篇文章作为一篇面向零基础读者的《MyBatis基础教程》,我们从环境搭建讲起,逐步介绍了核心概念、实战示例以及常见问题解答。MyBatis虽然不封装SQL语句,但它提供的灵活性和可控性让它成为了很多Java开发者的心头好。
记住一点:实践才是最好的老师。多敲代码、多查文档,你会很快熟练掌握这个强大的工具!
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏并关注后续内容 😊

评论 0