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

MyBatis 是一个Java 的持久层框架,简单点说,它帮我们把 Java 程序和数据库连接起来。如果你在开发一个 Web 应用,需要从数据库中读取数据或者向数据库保存数据,那么 MyBatis 就是一个非常实用的工具。
✅ 为什么要学习 MyBatis?
- 简化数据库操作:不用再手动写 JDBC(Java 数据库连接)代码。
- 灵活控制 SQL:不像 Hibernate 那样完全屏蔽 SQL,MyBatis 允许你直接写 SQL,方便优化和调试。
- 性能好,适合大型项目:很多一线大厂都使用它来处理高并发的数据请求。
🛠️ 二、环境准备:搭建你的第一个 MyBatis 开发环境

🔧 1. 所需工具
| 工具 | 版本建议 |
|---|---|
| JDK | 1.8 或以上 |
| Maven | 最新版(3.6+) |
| IntelliJ IDEA | 社区版即可 |
| MySQL | 5.7 或以上 |
如果你还没有安装这些工具,请先完成安装再继续阅读!
💡 2. 创建 Maven 项目
打开 IntelliJ IDEA,创建一个新的 Maven 项目:
File → New → Project → Maven
选好 JDK,填入 GroupId 和 ArtifactId 后点击下一步,Maven 会自动为你生成一个基础项目结构。
📦 3. 引入 MyBatis 和 MySQL 驱动依赖
找到项目的 pom.xml 文件,添加如下依赖内容:
<dependencies>
<!-- MyBatis 核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
🧠 三、核心概念讲解:通俗易懂地理解 MyBatis 关键术语
为了更好地理解和使用 MyBatis,我们需要了解几个关键概念:
🔑 1. SqlSessionFactory(SQL 工厂)
你可以把它想象成一个“制造 SQL 会话”的工厂。它是整个应用中最重要的对象之一,负责创建 SqlSession。
👤 2. SqlSession(SQL 会话)
SqlSession 可以用来执行 SQL 命令,就像你在命令行里执行 SQL 一样。你可以通过它插入数据、查询数据、更新记录等。
🗃️ 3. Mapper 接口与 XML 映射文件
这是 MyBatis 的灵魂部分。
- Mapper 接口:就是一个普通的 Java 接口,里面定义了方法,比如:查用户、改名字。
- XML 映射文件:这个接口里的每个方法,都会在 XML 中映射成一条 SQL 语句。
📚 示例图示:
Mapper接口 对应 XML映射文件
↓ ↓
UserMapper.java --> UserMapper.xml
↓ ↓
selectUserById() --> SELECT * FROM user WHERE id = #{id}
🧪 四、实战项目:跟着我一步步完成一个简单的 CRUD 系统
现在我们来做一个简单的学生管理系统,功能包括:
- 查询学生信息
- 添加学生信息
📝 第一步:准备数据库
创建一个名为 student_db 的数据库,并新建一个学生表:
CREATE DATABASE student_db;
USE student_db;
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
📁 第二步:配置 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/student_db"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>
⚠️ 注意替换
your_password为你的 MySQL 密码!
🧱 第三步:创建实体类 Student
在 src/main/java 下新建包 com.example.entity,然后创建 Student.java 类:
package com.example.entity;
public class Student {
private Integer id;
private String name;
private int age;
// Getters & Setters
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 int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
📄 第四步:创建 Mapper 接口
新建包 com.example.mapper,添加接口文件 StudentMapper.java:
package com.example.mapper;
import com.example.entity.Student;
import java.util.List;
public interface StudentMapper {
List<Student> getAllStudents();
void insertStudent(Student student);
}
📜 第五步:编写对应的 XML 映射文件
在 resources 下新建文件夹 mapper,并创建 StudentMapper.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.StudentMapper">
<select id="getAllStudents" resultType="com.example.entity.Student">
SELECT * FROM student
</select>
<insert id="insertStudent">
INSERT INTO student (name, age)
VALUES (#{name}, #{age})
</insert>
</mapper>
🚀 第六步:编写测试类运行程序
新建测试类 TestApp.java:
import com.example.entity.Student;
import com.example.mapper.StudentMapper;
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 TestApp {
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()) {
StudentMapper mapper = session.getMapper(StudentMapper.class);
// 查询所有学生
List<Student> students = mapper.getAllStudents();
for (Student s : students) {
System.out.println(s.getName());
}
// 插入新学生
Student newStu = new Student();
newStu.setName("张三");
newStu.setAge(20);
mapper.insertStudent(newStu);
session.commit(); // 提交事务
}
}
}
❓ 五、常见问题解答(FAQ)
Q1:运行时提示找不到数据库驱动?
答: 检查你的 mybatis-config.xml 文件中的 driver 名称是否正确:
MySQL 8.x 使用的是 com.mysql.cj.jdbc.Driver,而不再是以前版本的 com.mysql.jdbc.Driver。
Q2:为什么插入数据后数据库没有变化?
答: 忘记提交事务了!记得加上 session.commit()。
Q3:提示 Mapper not found?
答: 可能是因为 XML 路径没配对,检查一下 <mapper> 标签中的路径是否准确;或命名空间是否一致。
📚 六、学习建议:接下来该学什么?
你现在掌握了 MyBatis 的基础用法,可以继续学习以下内容:
✅ 进阶方向推荐:
- 动态 SQL
<if>、<foreach>、<set>等标签的使用
- MyBatis 与 Spring 集成
- 整合到企业级框架 Spring Boot 中
- 日志管理
- 结合 log4j、slf4j 查看底层 SQL 日志
- 插件开发
- 编写自己的 MyBatis 插件实现分页、加密等功能
🙌 总结
通过本文,你已经成功完成了:
✅ 创建了一个基于 MyBatis 的 Java 应用
✅ 实现了基本的数据库操作(查询、插入)
✅ 理解了 MyBatis 的核心概念和工作流程
坚持练习才是掌握的关键,快动手试试吧!欢迎在评论区留言提问,一起交流进步~

评论 0