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

在开发Java程序时,尤其是涉及数据库操作的系统(如电商、后台管理、数据报表等),我们常常需要频繁与数据库打交道。传统的做法是用JDBC直接写SQL语句并手动处理结果集,这样做虽然直接有效,但代码重复性高、可维护性差。
MyBatis 就是一个帮助简化这一过程的 Java 持久层框架(也叫 ORM 框架)。它不像 Spring Data JPA 那样完全自动帮你生成 SQL,而是通过配置文件或注解的方式,将你写的 SQL 与 Java 对象进行映射,实现对数据库的增删改查操作。
你可以把它看作一个“数据库助手”,帮你把数据库中查询出来的数据“翻译”成 Java 对象。
📌 MyBatis特点:
- 灵活——可以自己写 SQL,控制权更高
- 轻量级——不依赖容器,适合各种项目
- 易于集成——常与Spring Boot一起使用
- 性能好——相比全自动ORM更高效
现在我们就从零开始,一步步学习 MyBatis 的使用。
环境准备:搭建开发环境

在正式使用 MyBatis 前,你需要准备好以下开发工具和环境:
✅ 开发工具需求
| 工具 | 版本说明 |
|---|---|
| JDK | 推荐使用 JDK 8 或以上版本 |
| IDE | 推荐 IntelliJ IDEA Community Edition |
| Maven | 构建工具,用于依赖管理 |
| MySQL | 数据库示例,也可以使用其他数据库 |
💾 安装步骤简述:
安装JDK
- 下载地址:https://www.oracle.com/java/technologies/downloads/
- 配置
JAVA_HOME环境变量
安装IDEA
- 下载地址:https://www.jetbrains.com/idea/
- 安装完成后,打开即可使用
安装MySQL
- 下载地址:https://dev.mysql.com/downloads/mysql/
- 推荐使用 XAMPP 快速部署本地环境:https://www.apachefriends.org/index.html
安装Maven
- 下载地址:https://maven.apache.org/download.cgi
- 解压后配置
MAVEN_HOME和 PATH 环境变量
📂 创建一个新的 Maven 项目
- 打开 IDEA,选择 "New Project"
- 选择 “Maven”
- 输入 GroupId(比如:
com.example)和 ArtifactId(比如:mybatis-demo) - 点击完成,生成项目结构
📦 添加 MyBatis 依赖到 pom.xml
在项目的 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.26</version>
</dependency>
</dependencies>
保存后,Maven 会自动下载相关库文件。
MyBatis核心概念通俗讲解
为了让初学者更容易理解,我们先来认识几个关键的 MyBatis 概念。
🔧 1. Configuration(配置)
就像每个应用程序都有设置一样,MyBatis 也需要一个配置文件,告诉它如何连接数据库、日志输出方式等等。
通常这个配置文件叫做 mybatis-config.xml。
示例: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="your_password"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件位置 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>

✅ 你可以把它想象成一张地图,告诉 MyBatis:“你要去哪里工作?用什么工具?”
🗃️ 2. Mapper(映射器)
Mapper 是 MyBatis 的核心概念之一,负责定义数据库表和 Java 类之间的关系,以及执行具体的 SQL 操作。
通常有两种方式使用 Mapper:
- XML 文件方式(推荐新手使用)
- 注解方式
示例:User.java(Java对象类)
public class User {
private int id;
private String name;
private String email;
// Getters and Setters
}
示例: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="user">
<select id="selectUserById" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
📌 这里 <select> 表示查询操作,#{id} 表示占位符,会被传入参数替代。
🔄 3. SqlSession(数据库会话)
SqlSession 是 MyBatis 提供的接口,用于与数据库进行交互。你可以把它看作是一个“连接器”。
通常通过下面步骤获取和使用:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
User user = session.selectOne("user.selectUserById", 1);
System.out.println(user.getName());
} finally {
session.close();
}
📌 可以把它想象成一个快递员,你想取东西,就得找他帮忙去数据库里取。
实战项目:手把手带你完成第一个例子
我们现在来做一个完整的 CRUD 示例:对用户信息进行查询。
🧱 第一步:创建数据库和表
使用你的 MySQL 客户端创建数据库和表:
CREATE DATABASE testdb;
USE testdb;
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');
📘 第二步:编写实体类 User.java
创建文件:src/main/java/com/example/entity/User.java
package com.example.entity;
public class User {
private int id;
private String name;
private String email;
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 String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
📜 第三步:编写映射文件 UserMapper.xml
放在资源目录下:src/main/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="user">
<select id="selectUserById" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
🛠️ 第四步:编写测试类
新建一个 Java 类:MyBatisTest.java
import com.example.entity.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;
public class MyBatisTest {
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()) {
User user = session.selectOne("user.selectUserById", 1);
if (user != null) {
System.out.println("用户名:" + user.getName());
System.out.println("邮箱:" + user.getEmail());
} else {
System.out.println("未找到用户!");
}
}
}
}
▶️ 第五步:运行程序,查看结果
如果一切正常,你会看到类似输出:
用户名:Tom
邮箱:tom@example.com
恭喜!你已经成功完成了第一个 MyBatis 示例!
新手常见问题解答
❓ Q1:提示找不到驱动类 com.mysql.cj.jdbc.Driver 怎么办?
💡 答:确保你已经在 pom.xml 中正确引入了 MySQL 驱动,并且版本号兼容。另外检查数据库 URL 是否写对,驱动类名是否为 com.mysql.cj.jdbc.Driver。
❓ Q2:出现错误:SQLException: No suitable driver found for jdbc:mysql://...
💡 答:通常是驱动未加载或依赖未正确导入。请确认是否已执行 mvn clean install 并刷新项目依赖。
❓ Q3:ResultMap not found 或 resultType 报错怎么办?
💡 答:可能是因为 resultType 写错了类路径,或者没有正确扫描到 XML 文件。请仔细检查命名空间和类的全限定名。
❓ Q4:为什么我不能直接用驼峰命名转换字段?
💡 答:默认情况下 MyBatis 不会自动做下划线转驼峰,你需要开启配置:
<mapUnderscoreToCamelCase>true</mapUnderscoreToCamelCase>
学习建议:下一步学什么?
掌握了 MyBatis 的基本使用之后,你可以进一步深入以下几个方向:
- 动态 SQL:学会使用
<if><foreach>等标签构建复杂 SQL 查询 - 注解式开发:尝试不写 XML 文件,只用 Java 注解定义 Mapper
- 与 Spring Boot 整合:将 MyBatis 与 Spring 结合使用,实现更优雅的开发
- 事务管理:掌握多操作的数据一致性保障
- 缓存机制:了解一级缓存和二级缓存提升性能
结语
这篇文章从最基础的 MyBatis 概念讲起,带着你一步步实现了第一个小项目。希望你能从实践中感受到 MyBatis 的强大与便利。
持续练习是最好的老师。试着给用户表增加插入、更新、删除功能吧!
如果你喜欢这样的教学风格,欢迎关注更多后端技术实战教程。📚💻✨
文章总字数:约2757字
预计阅读时间:15~20分钟
实践时间:30分钟+(根据个人进度)
如有疑问,欢迎留言交流 👇

评论 0