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

在 Java 开发中,我们经常需要把数据从数据库中读取出来,或者将程序中的数据保存到数据库中。这个过程中会涉及到大量的 SQL 操作,比如:
- 查询用户信息
- 新增订单记录
- 更新产品价格
- 删除某个用户的评论
如果我们手动去写这些 SQL,不仅要拼接字符串,还要处理结果集(ResultSet)映射,代码量大、容易出错。
MyBatis 就是为了解决这个问题而诞生的。它是一个 轻量级的 Java 持久层框架,说白了就是:帮你更方便地操作数据库。
✅ 简单说一句:MyBatis = 简化数据库操作 + 灵活控制 SQL
二、环境准备:手把手搭建开发环境

在开始使用 MyBatis 之前,我们要准备好开发环境。包括以下几个部分:
1. JDK 安装
确保你电脑上安装好了 Java 开发环境,推荐使用 JDK 8 或以上版本。
java -version
javac -version
如果没安装,可以去 Oracle官网 下载安装。
2. Maven 工具安装
MyBatis 支持多种构建方式,我们这里用最常用的 Maven 来管理项目依赖。
安装方法如下:
- 到 Maven官网 下载压缩包。
- 解压后配置系统环境变量
MAVEN_HOME和PATH。 - 验证是否安装成功:
mvn -v
3. 数据库环境准备
我们以 MySQL 为例来演示 MyBatis 的使用。
步骤 1:安装 MySQL
可以从 MySQL官网 下载安装包,按照提示安装即可。
步骤 2:创建数据库和表
打开 MySQL 控制台或客户端工具(如 Navicat、DBeaver),执行以下 SQL:
CREATE DATABASE mybatis_demo;
USE mybatis_demo;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
4. IDE 推荐:IntelliJ IDEA 或 Eclipse
推荐使用 IntelliJ IDEA(简称 IDEA),功能强大且对 Maven 项目支持很好。Eclipse 也可以使用,但配置稍复杂些。
下载地址:
三、核心概念:简单易懂讲透关键知识点
虽然 MyBatis 功能强大,但刚接触时只需要掌握几个基本概念就够了。
1. Mapper 文件:SQL 写在这里
MyBatis 把所有的 SQL 写在 XML 文件中,称为 Mapper 文件。
举个例子:我们想查询所有用户的信息,SQL 可以这样写:
<!-- UserMapper.xml -->
<select id="findAllUsers" resultType="User">
SELECT * FROM users;
</select>
其中:
<select>表示这是一个查询语句;id是这个 SQL 的唯一标识,类似于方法名;resultType指定返回类型,我们后面再详细讲解。
2. 实体类(POJO)
SQL 查询的结果最终要变成 Java 对象。因此,我们需要定义一个 Java 类,字段与表一一对应。
例如:
public class User {
private int id;
private String name;
private String email;
// Getter & Setter 省略
}
注意:字段名最好跟数据库列名一致,这样 MyBatis 才能自动映射。
3. Mapper 接口:定义方法的接口
除了 XML 文件之外,还需要定义一个 Java 接口,告诉 MyBatis:
“我要调用哪个 SQL 方法?”
比如:
public interface UserMapper {
List<User> findAllUsers();
}
这个接口中的方法名 findAllUsers() 要和 XML 中的 id 保持一致。
4. MyBatis 核心配置文件: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/mybatis_demo?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>
5. 获取 SqlSession:执行 SQL 的入口
我们通过 MyBatis 提供的 SqlSessionFactory 创建 SqlSession,然后拿到 Mapper 接口并调用。
示例代码:
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> userList = mapper.findAllUsers();
for (User user : userList) {
System.out.println(user.getName());
}
}
四、实战项目:跟着教程一步步完成
下面我们来做一个完整的案例:实现用户信息的查询。
第一步:创建 Maven 项目结构
项目结构如下:
mybatis-demo/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/example/demo/
│ │ ├── User.java
│ │ └── UserMapper.java
│ └── resources/
│ ├── mybatis-config.xml
│ └── mapper/
│ └── UserMapper.xml
└── pom.xml
第二步:添加 MyBatis 和 JDBC 依赖
修改 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.28</version>
</dependency>
<!-- 日志依赖(可选) -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
第三步:编写实体类 User.java
package com.example.demo;
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; }
}
第四步:编写 Mapper 接口 UserMapper.java
package com.example.demo;
import java.util.List;
public interface UserMapper {
List<User> findAllUsers();
}
第五步:编写 Mapper XML 文件 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.demo.UserMapper">
<select id="findAllUsers" resultType="com.example.demo.User">
SELECT * FROM users
</select>
</mapper>
第六步:编写测试类运行程序
新建一个 Main.java:
package com.example.demo;
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 Main {
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.findAllUsers();
for (User user : users) {
System.out.println("ID:" + user.getId()
+ " | Name:" + user.getName()
+ " | Email:" + user.getEmail());
}
}
}
}
第七步:运行项目!
在 IDEA 中点击右上角的 ▶️ 图标运行程序,输出类似:
ID:1 | Name:小明 | Email:xiaoming@example.com
ID:2 | Name:小红 | Email:xiaohong@example.com
说明查询成功!
五、常见问题解答(FAQ)
Q1:运行报错:“Invalid bound statement (not found): com.example.demo.UserMapper.findAllUsers”
原因:XML 文件路径不正确或者未被识别。
解决办法:
- 确认 XML 文件位于
resources/mapper/目录下 - 确保
namespace和接口类名一致 - 查看
mybatis-config.xml中的<mapper>引用是否正确
Q2:找不到 MySQL 驱动?
原因:没有正确引入 JDBC 驱动依赖。
解决办法:
- 检查
pom.xml是否包含 mysql-connector-java - 如果不是 Maven 项目,请手动导入 jar 包
Q3:字段名和数据库列名不一样怎么办?
你可以使用 resultMap 来自定义映射关系:
<resultMap id="userResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="username"/>
<result property="email" column="email"/>
</resultMap>
然后在 select 中引用:
<select id="findAllUsers" resultMap="userResultMap">
SELECT * FROM users
</select>
Q4:IDEA 提示“Cannot resolve symbol 'Resources'”?
这是由于缺少 MyBatis 的 import 语句。手动添加:
import org.apache.ibatis.io.Resources;
六、学习建议:下一步该学什么?
恭喜你已经掌握了 MyBatis 的基础使用!接下来可以尝试深入以下几个方向:
进阶方向一:MyBatis 动态 SQL
学习 <if>, <foreach>, <choose> 等标签,让你的 SQL 更加灵活。
进阶方向二:关联查询(多表联查)
学习如何通过 <association> 和 <collection> 映射一对一、一对多的数据。
进阶方向三:MyBatis 与 Spring 集成
大多数企业项目中,MyBatis 会和 Spring 一起使用,你需要了解:
- 如何配置 Spring 整合 MyBatis
- 使用注解代替 XML 编写 SQL
进阶方向四:MyBatis-Plus
MyBatis-Plus 是 MyBatis 的增强工具,提供了很多便捷的功能(如分页插件、自动生成 SQL),适合快速开发。
总结
本篇教程从零带你体验了一次完整的 MyBatis 使用过程。你现在应该能够做到:
- 理解 MyBatis 的基本用途
- 搭建开发环境(Maven + MySQL)
- 编写简单的 SQL 并进行查询
- 排查常见的运行问题
如果你觉得这篇教程对你有帮助,请点赞收藏,并继续关注后续进阶内容!
Happy Coding 😄

评论 0