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

在开发Java Web应用时,我们常常需要和数据库打交道。比如用户注册、登录、商品购买等操作,都需要把数据存储或读取到数据库中。而直接使用JDBC操作数据库虽然可行,但代码重复多、维护难、效率低。
MyBatis 是什么?
MyBatis 是一个 Java 的“持久层框架”,它帮助我们简化与数据库的交互过程,让我们更专注于业务逻辑,而不是繁琐的 JDBC 编写。
MyBatis 用来做什么?
- 简化数据库访问,告别大量重复的 JDBC 操作
- 将 SQL 写在外部配置文件中,便于管理和修改
- 实现 Java 对象与数据库表之间的映射(ORM)
- 支持动态 SQL,灵活构建查询语句
换句话说,有了 MyBatis,我们可以用更简洁的方式,安全高效地操作数据库。
环境准备:搭建你的第一个 MyBatis 项目

为了让你能够动手实践,下面将详细介绍如何从头搭建一个包含 MyBatis 的 Java 项目。
1. 安装 Java 开发环境
确保你已经安装以下工具:
- JDK 1.8 或更高版本
- IDE(推荐 IntelliJ IDEA 或 Eclipse)
- Maven 构建工具
📌 检查是否安装成功:
打开终端/命令行输入java -version和mvn -v查看版本信息
2. 创建 Maven 项目
在 IntelliJ IDEA 中:
- File → New → Project → Maven
- 输入 GroupId(如:
com.example)、ArtifactId(如:mybatis-demo) - 创建完成后会在项目根目录生成
pom.xml
3. 添加 MyBatis 依赖
打开 pom.xml 文件,在 <dependencies> 标签内添加以下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
保存后,Maven 会自动下载相关 jar 包。
4. 配置数据库连接信息
创建一个名为 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/testdb?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件位置 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
请根据你本地数据库情况修改 url、username 和 password。
现在,我们的开发环境就准备好了!
核心概念:MyBatis 的关键术语解释

初学 MyBatis,可能会遇到一些新词汇。不要担心,下面用通俗的语言来帮你理解这些关键词。
1. Mapper 接口 & XML 文件
- Mapper接口:Java 接口中定义我们要执行的数据库方法,例如:
List<User> getAllUsers(); - XML 映射文件:在这个文件中编写具体的 SQL 查询语句,并与接口方法绑定起来
举个例子:
假设有一个 UserMapper.java 接口:
public interface UserMapper {
List<User> getAllUsers();
}
对应 UserMapper.xml 文件中的 SQL:
<mapper namespace="com.example.mapper.UserMapper">
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM users;
</select>
</mapper>
通过 namespace + id,就能把接口方法和 SQL 语句一一对应起来。
2. SqlSessionFactory 和 SqlSession
这两个类是 MyBatis 的核心对象:
- SqlSessionFactory:用于创建
SqlSession,通常在整个程序生命周期中只需要一个实例。 - SqlSession:代表一次数据库会话,可以执行 SQL、获取 Mapper。
初始化代码示例:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
3. 动态 SQL
这是 MyBatis 的一大亮点。你可以根据条件拼接 SQL,比如:
<select id="findUsers" parameterType="map" resultType="User">
SELECT * FROM users WHERE 1=1
<if test="name != null">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="age != null">
AND age > #{age}
</if>
</select>
上面的代码表示:如果 name 不为空,则加上模糊匹配条件;如果 age 不为 null,则筛选大于某个年龄。
实战项目:跟着教程做个小功能
接下来我们将以“用户管理系统”的一个小功能为例,一步一步完成 MyBatis 的基本使用。
步骤 1:创建数据库和用户表
运行以下 SQL 在 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');
INSERT INTO users (name, email) VALUES ('Jerry', 'jerry@example.com');
步骤 2:创建实体类
在 src/main/java/com/example/model 下创建 User.java:
package com.example.model;
public class User {
private int id;
private String name;
private String email;
// Getters and Setters
}
步骤 3:创建 Mapper 接口
创建接口 UserMapper.java:
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
List<User> getAllUsers();
}
步骤 4:创建 Mapper 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.mapper.UserMapper">
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM users;
</select>
</mapper>

步骤 5:编写主程序调用 MyBatis
创建 App.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 App {
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 userMapper = session.getMapper(UserMapper.class);
List<User> users = userMapper.getAllUsers();
for (User user : users) {
System.out.println(user.getName() + " - " + user.getEmail());
}
}
}
}
运行结果
控制台应输出:
Tom - tom@example.com
Jerry - jerry@example.com
恭喜!你完成了第一个使用 MyBatis 的小项目。
常见问题解答
以下是一些新手常见问题及解决办法:
❓Q1:提示找不到 Mapper?
- ✅检查
mybatis-config.xml中是否正确配置了 mapper 路径 - ✅确认接口全路径与 XML 的 namespace 是否一致
❓Q2:查询返回结果为空?
- ✅检查字段名与数据库列名是否一致(区分大小写)
- ✅可尝试使用
resultMap自定义字段映射
❓Q3:MySQL 报错“Public Key Retrieval is not allowed”?
- ✅修改
url添加allowPublicKeyRetrieval=true,例如:
<property name="url" value="jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"/>
❓Q4:编译时报 Resources cannot be resolved?
- ✅确保引入了 mybatis 包,且未手动删除相关 import 语句
学习建议:下一步怎么学?
你现在掌握了 MyBatis 的基础知识,能进行基本的数据库操作了。接下来建议学习:
- 💡进阶功能:动态 SQL、事务管理、缓存机制
- 🔗结合 Spring Boot 使用 MyBatis(推荐学习 Spring Boot 整合 MyBatis)
- 🧪练习 CRUD 操作,如添加用户、更新邮箱、删除用户等
- 🛠查阅官方文档(https://mybatis.org)深入了解原理
不断敲代码才能掌握扎实技能。建议自己动手做一个完整的用户管理系统或图书管理系统练手。
希望这篇《MyBatis 基础教程》对你有帮助,让你顺利入门这个流行的 Java 持久层框架!如果你对某个知识点还不清楚,欢迎留言交流 😊

评论 0