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

你是不是也经常听到“数据库操作”、“DAO层”这样的术语?Java开发中,我们常常需要和数据库打交道。比如用户注册信息要保存到数据库,查询商品库存也需要从数据库取数据。
传统的做法是直接写JDBC代码来连接数据库并执行SQL语句,但这种方式代码冗余、维护困难。
这时候,MyBatis就派上用场了。
MyBatis是一个 轻量级的Java持久层框架(也就是用于简化Java程序与数据库交互的工具)。它的核心思想是:
让开发者专注于SQL本身,而不是繁杂的底层数据库连接管理。
换句话说:你可以把MyBatis理解为一个数据库操作助手,它帮你处理连接、事务等繁琐的工作,你只需要专注地写SQL,并把结果映射成Java对象就可以了。
🎯 一句话总结:
MyBatis = 简化数据库操作 + 更灵活地控制SQL语句
环境准备:搭建你的第一个MyBatis项目环境

学习MyBatis之前,我们需要准备好以下环境。
1. 安装JDK
确保你的电脑上安装了 JDK 1.8 或更高版本。在命令行输入下面的命令查看当前安装的版本:
java -version
如果没有安装,请前往官网下载安装:https://www.oracle.com/java/technologies/javase-downloads.html
2. 安装IDE(推荐IntelliJ IDEA)
IntelliJ IDEA是一款非常强大的Java开发工具。对于初学者来说,社区版完全够用。
🔗 下载地址:https://www.jetbrains.com/idea/download/
3. 安装MySQL数据库(本地或远程都可)
MyBatis可以支持多种数据库,我们以最常见的 MySQL 为例。
✅ 推荐安装版本:MySQL 5.7+ 或 MySQL 8.0+
你可以使用 XAMPP 或者单独安装MySQL服务。
登录测试一下是否安装成功:
mysql -u root -p
4. 创建Maven项目(通过IDEA)
Maven是用来管理项目依赖的工具,我们可以很方便地导入MyBatis库和其他依赖。
步骤如下:
- 打开IntelliJ IDEA
- 选择 Create New Project
- 选择 Maven > Next
- 输入 GroupId(如
com.example)和 ArtifactId(如mybatis-demo) - Finish
5. 在pom.xml中添加MyBatis和MySQL驱动依赖
打开项目的 pom.xml 文件,在 <dependencies> 中添加以下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MySQL JDBC 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
📌 注意:请根据你使用的MySQL版本选择对应的Connector版本。
✅ 到此为止,我们的开发环境已经搭建完成!
核心概念:什么是Mapper、SqlSession、配置文件?

我们先了解几个MyBatis中的关键角色:
| 名称 | 角色说明 |
|---|---|
SqlSessionFactory |
工厂类,用来创建SqlSession,整个应用中通常只创建一次 |
SqlSession |
数据库会话,执行SQL语句、获取Mapper对象 |
Mapper接口 |
自定义接口,声明对数据库操作的方法 |
XML映射文件 |
把接口方法绑定具体的SQL语句 |
通俗一点解释就是:
就像餐厅点菜一样,你作为顾客(程序员),只需要告诉服务员(MyBatis)你想吃什么菜(SQL语句),不需要自己去厨房做菜(手动JDBC操作)。
实战项目:做一个简单的学生管理系统

让我们动手做一个小项目练练手吧!这个项目的目标是实现对学生表的增删查改功能。
第一步:创建数据库和学生表
在MySQL里执行以下SQL语句:
CREATE DATABASE mybatis_db;
USE mybatis_db;
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
第二步:创建学生类 Student.java
新建包 com.example.model,在里面创建 Student.java:
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 +
'}';
}
}
第三步:配置MyBatis配置文件 config.xml
在 resources 目录下新建 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_db?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>
第四步:编写Mapper接口 StudentMapper.java
新建包 com.example.mapper.StudentMapper:
package com.example.mapper;
import com.example.model.Student;
import java.util.List;
public interface StudentMapper {
List<Student> getAllStudents();
Student getStudentById(int id);
void insertStudent(Student student);
void updateStudent(Student student);
void deleteStudent(int id);
}
第五步:编写Mapper XML文件 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="com.example.mapper.StudentMapper">
<!-- 查询所有学生 -->
<select id="getAllStudents" resultType="com.example.model.Student">
SELECT * FROM student
</select>
<!-- 根据ID查询学生 -->
<select id="getStudentById" parameterType="int" resultType="com.example.model.Student">
SELECT * FROM student WHERE id = #{id}
</select>
<!-- 插入学生 -->
<insert id="insertStudent" parameterType="com.example.model.Student">
INSERT INTO student (name, age)
VALUES (#{name}, #{age})
</insert>
<!-- 更新学生 -->
<update id="updateStudent" parameterType="com.example.model.Student">
UPDATE student
SET name = #{name}, age = #{age}
WHERE id = #{id}
</update>
<!-- 删除学生 -->
<delete id="deleteStudent" parameterType="int">
DELETE FROM student WHERE id = #{id}
</delete>
</mapper>
第六步:主程序测试 CRUD 功能
新建类 TestMyBatis.java,放在任意位置即可:
package com.example.test;
import com.example.mapper.StudentMapper;
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;
import java.util.List;
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);
// 查询所有学生
List<Student> students = mapper.getAllStudents();
System.out.println("所有学生:" + students);
// 插入学生
Student s = new Student();
s.setName("Tom");
s.setAge(20);
mapper.insertStudent(s);
session.commit(); // 提交事务
System.out.println("插入成功");
// 再次查询验证
students = mapper.getAllStudents();
System.out.println("新增后:" + students);
}
}
}
运行这个程序,你应该能看到输出的信息。
常见问题:新手最常遇到的几个坑及解决办法
下面是一些新手容易踩的坑以及应对方案:
❓1. 为什么找不到Mapper接口?
✅ 检查以下几个方面:
- Mapper接口是否正确地放到包目录下
config.xml的<mappers>是否包含了这个Mapper文件路径- 项目构建时是否包含了这些资源文件(检查Build配置)
❓2. SQL语句报错或参数未传入?
✅ 可能的问题:
#{xxx}中的变量名拼写错误- 没有调用
session.commit()导致事务未提交 - 参数类型不一致(比如期望int,实际传了String)
💡 小技巧:可以在MyBatis日志中打印SQL语句,帮助排查问题。
❓3. 连接不上数据库怎么办?
✅ 检查:
- 数据库是否正在运行?
url、用户名、密码是否正确?- 是否导入了正确的MySQL驱动?
❓4. 启动时报错 “No MyBatis mapper was found in”
✅ 解决办法: 这通常是因为MyBatis找不到你的Mapper文件,检查:
mapper.xml是否放置在src/main/resources下namespace是否与Mapper接口的全限定类名一致
学习建议:学完基础后下一步怎么走?
恭喜你完成了第一个MyBatis项目!现在你已经掌握了MyBatis的基本用法。接下来可以继续深入学习以下方向:
🧩 一、进阶知识点
- MyBatis动态SQL(如
<if>、<foreach>) - 结果映射(ResultMap)
- 注解方式代替XML(@Select、@Insert 等)
- 缓存机制(一级缓存、二级缓存)
💾 二、整合Spring Boot使用MyBatis
大多数实际项目都会结合Spring Boot使用MyBatis。你可以进一步学习:
- Spring Boot + MyBatis 整合
- 使用 MyBatis-Plus 快速开发CRUD
- 分页插件 PageHelper 使用
🛠️ 三、提升工程能力
- 单元测试
- 日志集成(如Log4j、SLF4J)
- 事务控制
- 异常处理
总结
本文从零开始介绍了MyBatis的基础使用方法,包括开发环境搭建、核心概念解析、实战项目演练和常见问题解答。只要你按照步骤一步步练习,很快就能掌握这项实用技能。
记住一句话:
“纸上得来终觉浅,绝知此事要躬行。”
希望你在编程路上越走越远,加油💪!
如果你喜欢这种风格的教程,欢迎继续关注更多Java相关的内容!

评论 0