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

在Java开发中,我们经常需要和数据库打交道。比如做学生管理系统、电商网站、博客平台等,都离不开数据库存储数据。
传统的做法是直接使用JDBC(Java Database Connectivity)来操作数据库,但这有一个问题:代码会变得非常繁琐。我们要自己写连接数据库的代码、处理结果集、手动拼接SQL语句等等,不仅效率低,还容易出错。
于是就有了 MyBatis 这个框架,它的作用就是帮助我们简化这些重复性的数据库操作工作,同时又不隐藏 SQL 语句(相比Hibernate等ORM框架更灵活),让我们可以像写原生SQL一样自由地控制数据库操作。
简单说,MyBatis 就是一个 Java 程序员的好帮手,它让你更轻松地和数据库“对话”。
环境准备:搭建开发环境

要使用 MyBatis,我们需要以下几个工具或库:
✅ 所需软件清单:
| 名称 | 版本建议 | 说明 |
|---|---|---|
| JDK | 1.8 或以上 | Java 开发工具包 |
| Maven | 最新版 | 自动管理项目依赖 |
| MySQL | 5.7 或以上 | 数据库服务器 |
| IntelliJ IDEA | 社区版即可 | 编程 IDE,推荐使用 |
💻 安装步骤简述:
安装JDK
- 下载地址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
- 设置环境变量
JAVA_HOME
安装Maven
- 下载地址:https://maven.apache.org/download.cgi
- 解压后配置环境变量
MAVEN_HOME - 检查命令:
mvn -v
安装MySQL
- 推荐使用 MySQL Community Edition
- 使用默认配置安装即可,记得设置 root 用户密码
安装 IntelliJ IDEA
- 下载地址:https://www.jetbrains.com/idea/download/
- 安装后创建新项目
核心概念:用最简单的语言解释关键概念
在正式写代码之前,我们先了解几个核心概念:
🧠 1. 什么是 ORM?
ORM 全称是 Object Relational Mapping(对象关系映射)
通俗点说,就是把数据库中的表变成 Java 对象来操作
举个例子:
数据库记录(student表) Java类 id: 1, name: 张三, age: 20 Student对象:stu.id=1, stu.name="张三", stu.age=20
这样你就可以通过操作 Java 对象间接操作数据库了!
🧠 2. 什么是 MyBatis 的 Mapper 文件?
- 可以理解为“SQL 映射文件”
- 在这个文件里,你可以写下各种 SQL 查询语句,并给它们一个“名字”
- 后面 Java 代码就可以调用这些 SQL 并得到结果
例如:
<select id="selectStudentById" resultType="Student">
SELECT * FROM student WHERE id = #{id}
</select>
🧠 3. 什么是 MyBatis 的 Configuration 配置文件?
就是一个 XML 文件,告诉 MyBatis 基本信息,比如:
- 数据库账号、密码
- 数据库驱动名
- 映射文件的路径
示例 config.xml:
<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"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/studentMapper.xml"/>
</mappers>
</configuration>
🧠 4. 什么是 Dao 和 Mapper 接口?
- Dao 是 Data Access Object(数据访问对象),用于封装对数据库的操作
- Mapper 接口 是 Dao 的一种形式,接口方法和 XML 中的 SQL ID 一一对应
- 例如:
public interface StudentMapper {
Student selectStudentById(int id);
}
对应的 XML 就是上面写的那个 selectStudentById 方法中的 SQL。
🧠 总结一下核心组件的关系图:
MyBatis 工作流程:
[Java程序] → 调用 [Mapper接口] → 匹配 [XML配置文件中的SQL] → 执行SQL → 返回结果(如Student对象)
实战项目:跟着教程一步步完成一个简单项目
我们现在来做一个小项目:查询学生信息
🛠️ 第一步:创建数据库和表
打开 MySQL,执行以下语句:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
INSERT INTO student (name, age) VALUES ('张三', 20), ('李四', 22);
📁 第二步:新建 Maven 项目结构
用 IntelliJ IDEA 创建 Maven 项目,目录如下:
mybatis-demo/
├── src/
│ ├── main/
│ │ ├── java/ # Java 源码
│ │ └── resources/ # 配置文件和 mapper XML
├── pom.xml # Maven 项目配置文件
📦 第三步:添加 MyBatis 依赖到 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.28</version>
</dependency>
<!-- 日志输出(可选) -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
别忘了运行 mvn clean install 下载依赖!
⚙️ 第四步:编写配置文件 config.xml
放在 src/main/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"/>
<property name="username" value="root"/>
<property name="password" value="你的密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/studentMapper.xml"/>
</mappers>
</configuration>
🗂️ 第五步:编写 studentMapper.xml 文件
创建目录 resources/mapper/,新建文件 studentMapper.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="StudentMapper">
<select id="selectStudentById" resultType="Student">
SELECT * FROM student WHERE id = #{id}
</select>
</mapper>
📄 第六步:编写 Student.java 类
创建包 com.example.model.Student:
package com.example.model;
public class Student {
private int id;
private String name;
private int age;
// 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 int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}

🧪 第七步:编写测试类 TestMyBatis.java
package com.example.test;
import com.example.model.Student;
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;
public class TestMyBatis {
public static void main(String[] args) throws Exception {
String resource = "config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student student = mapper.selectStudentById(1);
System.out.println(student);
}
}
}

🔌 第八步:补充 Mapper 接口 StudentMapper.java
package com.example.mapper;
import com.example.model.Student;
public interface StudentMapper {
Student selectStudentById(int id);
}
🎉 第九步:运行程序看结果!
右键点击 TestMyBatis.java 运行主函数,如果看到类似下面的输出说明成功:
Student{id=1, name='张三', age=20}
🎉 恭喜你!这是你第一个完整的 MyBatis 程序!
常见问题:新手常遇到的问题和解答
❓ 为什么提示找不到 mapper.xml?
✅ 确保:
mapper/studentMapper.xml正确存在于资源目录下config.xml中的<mapper>标签路径正确无误
❓ 报错 “Invalid bound statement (not found): xxx.xxx”
✅ 确保:
- Mapper 接口的方法名必须与 XML 中的
id完全一致 - Mapper 接口要被注册进 MyBatis 的配置
- 使用正确的命名空间:
namespace="接口全限定名",比如:
<mapper namespace="com.example.mapper.StudentMapper">
❓ 为什么没有自动将查询结果封装成 Java 对象?
✅ 确保:
resultType写的是对应的 Java 类完整路径,或者设置了类型别名(后续进阶内容)- 数据库字段名与 Java 类属性名一致(或者使用 resultMap)
❓ 如何查看 MyBatis 执行的实际 SQL?
✅ 添加日志支持(前面已经加了 log4j 依赖),在 resources 新建 log4j.properties:
log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
这样你就能在控制台看到真实的 SQL 输出啦!
学习建议:下一步学习什么?
恭喜你完成了 MyBatis 的入门!接下来你可以学习以下内容来深入掌握:
🔍 1. 更多 CRUD 操作
- 插入数据 insert
- 更新数据 update
- 删除数据 delete
语法格式类似,只需要修改 <insert>、<update> 标签即可。
💬 2. 动态 SQL
MyBatis 支持非常强大的动态 SQL,比如:
<if>条件判断<foreach>循环遍历参数列表<set>用于更新操作时自动生成 SET 子句
适合复杂查询条件的场景。
🔄 3. 多表关联查询
学会如何进行一对一、一对多、多对多的关联查询(需要用到 <association> 和 <collection>)。
🔐 4. 事务管理
学会控制事务,确保多个数据库操作要么全部成功,要么全部失败回滚。
🧩 5. 整合 Spring Boot
MyBatis + Spring Boot 组合是目前主流的 Web 开发框架之一,你会学到注解式编程、自动装配等内容。
✅ 总结回顾
今天我们从零开始,搭建了一个 MyBatis 项目,实现了基本的数据查询功能,掌握了以下核心知识:
- 什么是 MyBatis,它的作用和优势
- 如何配置开发环境
- MyBatis 的核心组成(配置文件、Mapper接口、SQL XML文件)
- 编写了第一个完整的 MyBatis 应用程序
- 解答了一些新手常见问题
- 提供了进一步学习的方向
继续努力吧,MyBatis 的大门才刚刚为你打开!如果你觉得这篇教程有帮助,欢迎收藏+点赞,后续还会带来更多实战教程哦!
📍 附:GitHub 示例地址(假设你有一个公开仓库)
如需源码打包下载,请留言“要源码”我会回复网盘链接。
祝你学得开心,用得顺手!😊

评论 0