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

在我们开发Java后端应用时,常常需要与数据库打交道。例如,我们可能需要从数据库中读取用户信息,或者将用户注册的信息保存到数据库中。传统的做法是使用JDBC(Java Database Connectivity)来操作数据库,但这种方式编写代码会很繁琐。
这时候,MyBatis 就登场了。MyBatis 是一个 轻量级的 Java 持久层框架,它的作用就是让我们可以更加方便地操作数据库,而不需要每次都写大量的 JDBC 代码。
你可以把 MyBatis 看作是一个“桥梁”——它连接着你的 Java 对象和数据库中的表。你只需要告诉 MyBatis 你想执行什么 SQL,以及如何将结果映射成 Java 对象,剩下的工作就交给它去做。
接下来我们就一步步带你了解并掌握 MyBatis 的基本用法。
环境准备:搭建我们的开发环境

要使用 MyBatis,我们需要准备好以下几个工具:
1. Java 开发环境
确保你已经安装了:
- JDK 8 或以上版本
- IDE(比如 IntelliJ IDEA 或 Eclipse)
你可以通过命令行输入以下命令验证是否安装成功:
java -version
javac -version
2. MySQL 数据库
这里以 MySQL 为例,你需要:
- 安装 MySQL(建议使用 5.7 或 8.0)
- 安装可视化客户端(如 Navicat、MySQL Workbench 或 DBeaver)
安装完成后,启动 MySQL 并创建一个测试数据库:
CREATE DATABASE mybatis_test;
USE mybatis_test;
3. Maven 构建工具
MyBatis 使用 Maven 来管理依赖,所以你也需要安装 Maven,并配置好环境变量。
检查是否安装成功:
mvn -v
4. 创建 Maven 项目
打开 IDEA,新建一个 Maven 工程,结构如下:
mybatis-demo/
├── pom.xml
└── src/
└── main/
├── java/ ← Java源码目录
└── resources/ ← 配置文件目录
5. 在 pom.xml 中添加 MyBatis 和 MySQL 依赖
<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>
</dependencies>
这样你的开发环境就准备好了!
核心概念:MyBatis的核心思想与关键组件


为了让你更轻松地上手 MyBatis,我们先来认识几个非常重要的概念。
1. Mapper接口和XML映射文件
MyBatis 是通过 Mapper 接口 来定义数据库操作的。每一个方法对应一条 SQL 查询或更新语句。
例如,我们可以写一个 UserMapper.java 接口:
public interface UserMapper {
List<User> selectAllUsers();
}
然后,在 XML 文件中定义这个方法对应的 SQL:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM users;
</select>
</mapper>
这就是 MyBatis 最核心的设计理念:SQL 与 Java 代码分离,增强可维护性。
2. MyBatis配置文件 mybatis-config.xml
为了让 MyBatis 能正常运行,我们需要配置数据库连接等基本信息,这个配置文件通常命名为 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/mybatis_test?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>
这个文件的作用是告诉 MyBatis 连接哪个数据库、怎么连接,以及要用哪些映射文件。
3. SqlSessionFactory 和 SqlSession
这是两个重要的类:
- SqlSessionFactory 是用来创建数据库会话对象的工厂类。
- SqlSession 表示一次数据库会话,所有的数据库操作都要通过它来完成。
我们会在实际例子中详细展示它们的使用方式。
实战项目:创建第一个 MyBatis 应用
现在,我们来一起完成一个完整的项目,目的是查询所有用户的列表。
第一步:创建数据库表
执行以下 SQL:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
email VARCHAR(255)
);
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');
第二步:创建 User Java类
在 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
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; }
}
第三步:创建 Mapper 接口
在 com.example.mapper.UserMapper.java:
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
List<User> selectAllUsers();
}
第四步:创建 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="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
</mapper>
第五步:编写测试类 Main.java
在 src/main/java/com/example/Main.java:
package com.example;
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.IOException;
import java.io.InputStream;
import java.util.List;
public class Main {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectAllUsers();
for (User user : users) {
System.out.println("ID: " + user.getId() + ", Name: " + user.getName() + ", Email: " + user.getEmail());
}
} finally {
session.close();
}
}
}
第六步:运行测试
如果你已经正确配置了数据库连接,在 IDEA 中运行 Main 类,你应该会看到控制台输出类似以下内容:
ID: 1, Name: 张三, Email: zhangsan@example.com
ID: 2, Name: 李四, Email: lisi@example.com
恭喜你!你已经完成了第一个 MyBatis 程序!
常见问题:新手常见疑问与解决方案
| 问题 | 解决方案 |
|---|---|
| 报错:ClassNotFoundException: com.mysql.cj.jdbc.Driver | 检查 pom.xml 是否有 MySQL 驱动依赖 |
| 运行时报:Invalid bound statement (not found): com.example.mapper.UserMapper.selectAllUsers | 检查 XML 文件路径是否正确,是否被包含在 mybatis-config.xml 的 <mappers> 标签里 |
| 执行 SQL 时出现中文乱码 | 在数据库连接 URL 后面加上 ?characterEncoding=utf8 |
| 查询返回空数据 | 检查数据库是否有对应数据,字段名与类属性名是否一致 |
| Mapper 接口无法注入 | 确保命名空间与接口全限定类名一致 |
学习建议:下一步该学什么?
你已经掌握了 MyBatis 的基础用法,接下来可以继续学习这些进阶知识:
- 动态 SQL:学会
<if>,<foreach>,<choose>等标签,实现灵活的 SQL 构造。 - 注解方式:除了 XML 方式,MyBatis 也支持使用注解来写 SQL。
- 事务管理:了解如何开启事务并进行批量操作。
- 关联查询:处理一对多、多对一等复杂关系。
- 集成 Spring Boot:学习如何在 Spring Boot 项目中整合 MyBatis,构建完整 Web 应用。
总结
本篇文章从零开始,带你搭建了一个简单的 MyBatis 项目,介绍了它的核心概念,演示了完整的代码流程,并解答了一些常见的问题。
记住一句话:MyBatis 是帮你写 JDBC 的工具,而不是替代你的思考。 多练习 SQL 写法、理解面向对象与关系模型之间的映射,才能真正掌握 MyBatis 的精髓。
如果这篇文章对你有帮助,欢迎点赞、收藏,并继续关注后续的《MyBatis进阶》系列文章!
✅ 下一步推荐阅读:
- 《MyBatis动态SQL详解》
- 《MyBatis注解方式开发指南》
- 《Spring Boot整合MyBatis实战教程》

评论 0