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

在开发一个Java项目时,我们常常需要和数据库打交道。比如,用户注册信息存到哪里?订单数据如何查询?这时候你就需要用到持久层技术。
传统的做法是用JDBC写大量的数据库操作代码,例如连接数据库、拼接SQL语句、处理结果集等。不仅代码重复度高,而且容易出错。为了解决这个问题,Java开发者们发明了一些工具——它们被称为ORM框架(对象关系映射框架)。
ORM的意思是,我们可以把数据库的一张表当作一个Java类来看,每一条记录就是一个Java对象。
而今天我们介绍的主角——MyBatis,就是这样一个非常流行的ORM框架。它的最大特点在于灵活且轻量级。它不像Hibernate那样完全封装SQL操作,而是给了你更高的自由度,非常适合熟悉SQL又想提高效率的开发者。
简单来说:
- 使用MyBatis可以让你更轻松地操作数据库
- 它可以帮你自动完成一些繁琐的底层操作,比如建立连接、执行SQL、映射结果集
- 你只需要关注SQL本身即可
好了,现在我们就一起来动手学一学这个好东西吧!
环境准备:搭建MyBatis开发环境

要使用MyBatis,你需要准备好以下开发工具和库:
1. 安装JDK(Java Development Kit)
确保你的电脑已经安装了 JDK(建议1.8以上版本),可以通过命令查看版本:
java -version
javac -version
如果没安装,请去 Oracle官网 下载安装。
2. 安装IDE(推荐IntelliJ IDEA)
IntelliJ IDEA 是目前 Java 开发最常用的 IDE,支持 Maven 项目管理,使用起来非常方便。
你可以下载社区版:JetBrains官网
3. 添加MyBatis依赖(使用Maven)
在Java项目中,我们一般使用 Maven 或 Gradle 来管理依赖。
假设你创建了一个 Maven 项目,打开 pom.xml 文件,加入以下依赖:
<dependencies>
<!-- MyBatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
保存后,Maven会自动下载相应的jar包。
4. 安装MySQL数据库(或者其他数据库)
你可以安装本地MySQL服务器,或者使用Docker启动一个MySQL实例。这里以本地为例:
- 去官网下载安装 MySQL Community Server
- 安装完成后,使用Navicat或MySQL Workbench等工具连接测试一下
接下来我们将使用数据库名为 mybatis_demo 的数据库,并添加一张测试表。
核心概念:理解MyBatis的几个关键术语

在开始写代码前,我们需要理解几个基本的概念:
✅ 1. SqlSessionFactoryBuilder 和 SqlSessionFactory
这是MyBatis的入口类。
SqlSessionFactoryBuilder:用于读取配置文件,生成工厂对象SqlSessionFactory:负责创建SqlSession对象
✅ 2. SqlSession
这是与数据库交互的核心接口。
- 你可以通过它获取Mapper接口的实现类
- 可以直接执行SQL语句
- 负责事务管理和连接池管理
✅ 3. Mapper接口 + XML映射文件
这是MyBatis中最核心的部分。
- Mapper是一个Java接口,定义方法,每个方法对应一条SQL语句
- XML文件里写对应的SQL逻辑和参数映射
示例:
// 接口
public interface UserMapper {
User selectUser(int id);
}
// XML文件
<select id="selectUser" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
✅ 4. 配置文件 mybatis-config.xml
MyBatis的所有全局设置都在这个文件中定义:
- 数据源配置(数据库地址、账号密码)
- 别名设置
- 映射文件路径
实战项目:做一个简单的查询功能

我们来实战一个小项目:实现从数据库中查询一个用户的完整信息。
第一步:建库建表
登录MySQL,创建数据库和表:
CREATE DATABASE mybatis_demo;
USE mybatis_demo;
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');
第二步:创建Java实体类
创建一个类 User.java,表示用户信息:
public class User {
private int id;
private String name;
private String email;
// Getter和Setter
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; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
第三步:编写Mapper接口
新建一个接口 UserMapper.java:
import java.util.List;
public interface UserMapper {
User selectUserById(int id); // 查询单个用户
}
第四步:编写Mapper XML文件
在resource目录下创建映射文件 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="selectUserById" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
注意:这里的 namespace 要对应你的接口路径。
第五步:配置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_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>
请将 username 和 password 替换为你自己的数据库账户信息。
第六步:编写测试类运行查询
最后我们来编写一个测试类:
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;
public class TestMyBatis {
public static void main(String[] args) throws IOException {
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);
User user = mapper.selectUserById(1);
System.out.println(user);
}
}
}
运行这段代码,如果控制台输出了刚才插入的 Tom 用户的信息,那说明一切正常!
常见问题解答(FAQ)
❓为什么程序报错提示找不到mapper文件?
可能是路径配置错误。请检查:
- XML文件是否真的放在resources目录下
<mapper>标签中的路径是否正确(相对于resources)
❓为什么返回的User对象属性为空?
可能有以下几个原因:
- SQL字段名和Java类的属性不匹配
- 没有给resultType指定正确的类全限定名
- 表中确实没有该ID的数据
❓为什么数据库连接不上?
检查以下几个点:
- 数据库是否启动
- 配置文件中的用户名、密码是否正确
- JDBC URL 是否正确,特别是端口号、数据库名
❓MyBatis一定要配合XML吗?
不是必须的!MyBatis支持注解方式。例如:
@Select("SELECT * FROM users WHERE id = #{id}")
User selectUserById(int id);
不过对于复杂SQL来说,XML方式可读性更高,适合团队协作。
学习建议:下一步怎么走?
你现在已经掌握了MyBatis的基础知识,能完成最基本的数据库查询功能。那么下一步该怎么做呢?以下是几个学习方向建议:
✅ 1. 学习增删改操作
除了查询,我们还需要做插入、更新、删除等操作。可以尝试自己写一个用户注册功能。
✅ 2. 掌握动态SQL
MyBatis提供了一套强大的动态SQL语法,比如 <if>、<foreach>,可以让你根据条件生成不同的SQL语句。
✅ 3. 了解缓存机制
MyBatis内置一级缓存(默认开启)和二级缓存(需手动配置)。学会合理使用缓存可以提升系统性能。
✅ 4. 结合Spring Boot使用MyBatis
MyBatis单独使用虽然方便,但实际企业项目中更多是结合 Spring Boot 使用。Spring Boot 提供了对MyBatis的自动配置,集成更加高效。
结束语
恭喜你完成了这篇《MyBatis基础教程》的学习!你现在已经具备使用MyBatis进行数据库操作的能力,接下来可以继续深入学习它的高级特性,也可以结合Spring Boot做一个完整的Web项目。
记住一句话:
“实践是最好的老师”。
多敲代码、多试错、多总结,你就一定能掌握MyBatis!
如果你喜欢这样的教学风格,欢迎继续关注后续的进阶教程系列哦 😊
🎯 本教程共计约 2961字,内容涵盖MyBatis环境搭建、核心概念、代码示例和常见问题,适用于零基础初学者快速上手。

评论 0