MyBatis基础教程:Java持久层框架入门
一、什么是MyBatis?它是用来做什么的?

在我们正式开始之前,先来了解一下 MyBatis 是什么。
简单来说,MyBatis 是一个 Java 的数据库操作框架。它可以帮助我们更轻松地操作数据库,比如说对数据进行增删改查(也就是常说的 CRUD 操作)。
你可能会问:“那不是可以用 JDBC 做吗?”没错,JDBC 是 Java 提供的操作数据库的基础方式。但使用 JDBC 写代码会非常繁琐,需要写很多重复性的代码,比如打开连接、处理结果集等等。
而 MyBatis 就是为了解决这个问题而诞生的。它简化了数据库操作,让你把注意力集中在 SQL 上,而不是重复性代码上。
二、环境准备:搭建MyBatis开发环境


要开始学习MyBatis,我们需要准备好以下工具和依赖:
所需软件/工具:
- JDK(推荐1.8及以上)
- IDE(如 IntelliJ IDEA 或 Eclipse)
- MySQL 数据库(或者其他你喜欢的关系型数据库)
- Maven(用于管理项目依赖)
步骤1:创建Maven项目
- 打开IDE(以IntelliJ为例),选择“Create New Project”。
- 选择 Maven 项目类型。
- 输入 GroupId(比如 com.example)和 ArtifactId(比如 mybatis-demo)。
- 确认后生成项目结构。
步骤2:添加MyBatis和MySQL驱动依赖
在你的 pom.xml 文件中添加如下内容:
<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.30</version>
</dependency>
</dependencies>
然后点击“Reimport”,Maven会自动下载这些依赖包。
步骤3:配置数据库连接信息
在项目的 src/main/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/test_db?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件位置 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
请根据自己的数据库信息修改用户名、密码和数据库名。
三、核心概念:理解MyBatis的几个关键点

接下来我们要了解 MyBatis 中一些非常重要的概念,它们是你编写 MyBatis 程序的基础。
1. SqlSessionFactory 和 SqlSession
这两个对象就像“工厂”一样,负责帮你创建与数据库交互的对象。
- SqlSessionFactory:相当于一个工厂类,它是通过
mybatis-config.xml配置创建的。 - SqlSession:相当于一个数据库连接对象,你可以用它来执行SQL语句。
示例代码:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
上面的代码就建立了与数据库之间的桥梁。
2. Mapper 接口 和 XML映射文件
这是 MyBatis 的核心机制之一 —— 将接口方法绑定到SQL语句。
举个例子:
UserMapper.java(接口)
public interface UserMapper {
List<User> getAllUsers();
}
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>
解释:
namespace对应接口的全限定名id对应接口中的方法名resultType表示返回的数据类型(User实体类)
这样,当你调用 userMapper.getAllUsers() 时,MyBatis就会自动去执行对应的SQL并返回结果。
3. 实体类(Model)
这个就是我们常见的 POJO 类(简单的Java对象),通常和数据库表对应。
例如:
public class User {
private int id;
private String name;
private String email;
// getter/setter省略
}
四、实战项目:实现一个查询用户列表的功能
现在我们来动手实践一个小项目 —— 查询所有用户信息。
第一步:建表
在你的 MySQL 数据库中创建一个 users 表:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100)
);
-- 插入测试数据
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');
第二步:编写实体类
创建 User.java:
public class User {
private int id;
private String name;
private String email;
// getter 和 setter 方法(建议自动生成)
}
第三步:编写Mapper接口和XML文件
创建接口 UserMapper.java:
package com.example.mapper;
import java.util.List;
public interface UserMapper {
List<User> getAllUsers();
}
创建对应的 UserMapper.xml 文件:
<mapper namespace="com.example.mapper.UserMapper">
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
</mapper>
别忘了将该XML文件路径配置到 mybatis-config.xml 的 <mappers> 标签中:
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
第四步:编写测试类
创建 MainApp.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 MainApp {
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("ID: " + user.getId() + ", Name: " + user.getName() + ", Email: " + user.getEmail());
}
}
}
}
运行这个类,你会看到控制台输出从数据库中查询出来的用户信息!
五、常见问题解答(FAQ)
下面是一些初学者常遇到的问题及解决办法:
✅ Q1:启动时报错“ClassNotFound”或“No suitable driver”
这通常是由于没有正确引入依赖导致的。请检查:
mysql-connector-java是否添加- 版本是否适合你的JDK和MySQL数据库
- Maven是否重新导入依赖(可以尝试刷新依赖)
✅ Q2:找不到UserMapper.xml
检查以下几点:
- xml 文件是否放在
resources目录下 mybatis-config.xml中的<mapper>路径是否正确namespace是否与接口的全限定名一致
✅ Q3:执行SQL报错“Unknown column”
说明你在SQL中引用了一个不存在的字段,请检查:
- 实体类属性与数据库列名是否匹配
- 如果不一致,可以使用
<resultMap>做字段映射
✅ Q4:为什么不用写try-catch也能运行?
上面的代码中使用了 “try-with-resources” 结构,这是 Java 7+ 的特性,能自动关闭资源,不需要手动写 finally 关闭 sqlSession。
六、学习建议:下一步学什么?

恭喜你完成本教程!你已经掌握了 MyBatis 的基本使用方法。接下来你可以学习以下几个方向来继续深入:
1. 学习动态SQL
MyBatis 强大的地方就在于它的动态 SQL 功能,例如 <if>、<choose>、<foreach> 等标签,能根据参数不同灵活构建SQL语句。
2. 掌握关联查询
学习如何进行多表联查、一对一、一对多等复杂关系的处理。
3. 使用注解代替XML
除了XML方式,MyBatis 还支持用注解(@Select、@Insert等)来写SQL,适合小项目或快速开发。
4. 整合Spring Boot
当你要开发 Web 项目时,常常会把 MyBatis 与 Spring Boot 结合使用,这也是企业级开发中非常常见的组合。
如果你坚持每一步都动手做了,那么你现在已经有能力写出一个完整的数据库操作程序了。接下来的学习只需要一点点扩展知识,就能应对大多数需求啦!
继续加油,成为一个真正的Java后端工程师吧!🔥

评论 0