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

在Java开发中,经常需要与数据库进行交互。比如我们开发一个用户注册系统,就需要把用户的账号信息保存到数据库中,或者从数据库中查询出某个用户的信息。
如果我们直接使用JDBC(Java Database Connectivity)来操作数据库,虽然能实现功能,但代码会非常繁琐。例如,每次连接数据库都要写很多“重复”的代码,比如加载驱动、获取连接、编写SQL语句、处理结果集等。这时候,MyBatis就派上用场了。
什么是MyBatis?
MyBatis 是一个 基于Java的持久层框架,它简化了数据库操作的过程,让开发者可以专注于业务逻辑,而不用关心底层数据库连接的细节。
简单理解就是:MyBatis 帮你管理了数据库操作的流程,你只需要写 SQL 语句和简单的配置,它就会自动帮你执行并返回结果。
二、环境准备:搭建你的第一个MyBatis项目

为了更好地学习,我们将一步步搭建一个包含MyBatis的Java项目。这里以最常用的方式——使用Maven构建工具来创建项目。
步骤1:安装必要的开发工具
你需要以下工具:
- JDK 8 或以上版本
- IDE(如 IntelliJ IDEA / Eclipse)
- MySQL数据库
- Maven 构建工具
如果你还没有这些工具,请先安装好再继续下一步。
步骤2:创建Maven项目
打开IntelliJ IDEA,选择:
File → New → Project → Maven → Create from archetype
选择 maven-archetype-quickstart,然后填写 GroupId 和 ArtifactId(比如 com.example.mybatisdemo)
完成后你会看到如下目录结构:
mybatisdemo
├── pom.xml
└── src
├── main
│ └── java
│ └── com.example.mybatisdemo.App.java
└── test
└── java
└── com.example.mybatisdemo.AppTest.java
步骤3:添加MyBatis和MySQL依赖
找到 pom.xml 文件,在 <dependencies> 标签下加入如下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
保存后Maven会自动下载依赖库。
步骤4:准备数据库环境
我们创建一个简单的用户表:
CREATE DATABASE mybatis_demo;
USE mybatis_demo;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
INSERT INTO user (name, age) VALUES ('张三', 25);
这样我们的数据库就准备好了!
三、核心概念:用白话解释MyBatis的关键知识点

学习MyBatis之前,先来了解几个重要的术语和它们的作用。
1. Mapper接口
你可以把它理解为一个“接口”,用来定义要对数据库执行的操作方法,比如“查找所有用户”、“根据id查找用户”。
示例:
public interface UserMapper {
List<User> findAllUsers();
}
2. XML映射文件
这个文件用于写具体的 SQL 语句,并将接口的方法和 SQL 映射起来。
示例 UserMapper.xml:
<mapper namespace="com.example.mapper.UserMapper">
<select id="findAllUsers" resultType="com.example.model.User">
SELECT * FROM user;
</select>
</mapper>
3. MyBatis配置文件(mybatis-config.xml)
这是MyBatis的全局配置文件,主要用于设置数据库连接信息、别名、缓存等等。
示例:
<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"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
4. 工具类SqlSessionFactory和SqlSession
这两个类是MyBatis工作的核心类。
- SqlSessionFactory:负责读取配置文件并生成 SqlSession 实例。
- SqlSession:真正执行SQL语句的接口。
四、实战项目:做一个查询用户列表的小项目

现在我们来动手做一个小项目,目标是通过MyBatis连接数据库,查询所有的用户信息并打印出来。
步骤1:创建实体类 User
在项目的src/main/java下新建包 com.example.model,创建类 User.java:
package com.example.model;
public class User {
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 "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
步骤2:编写Mapper接口
创建包 com.example.mapper,创建接口 UserMapper.java:
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
List<User> findAllUsers();
}
步骤3:编写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="findAllUsers" resultType="com.example.model.User">
SELECT * FROM user;
</select>
</mapper>
步骤4:编写主程序启动入口
修改App.java内容如下:
package com.example.mybatisdemo;
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;
import java.util.List;
public class App {
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);
List<User> users = mapper.findAllUsers();
for (User user : users) {
System.out.println(user);
}
}
}
}
步骤5:运行测试
运行 App.java 的 main 方法,控制台输出类似如下内容:
User{id=1, name='张三', age=25}
恭喜!你现在成功使用MyBatis完成了第一次数据库查询!
五、常见问题解答
下面是一些初学者常见的疑问及解答:
问题1:提示找不到驱动类怎么办?
错误信息:ClassNotFound: com.mysql.cj.jdbc.Driver
解决方法:
检查是否正确添加了MySQL驱动依赖,是否已刷新Maven。也可以手动下载jar包导入lib。
问题2:XML文件路径不对,怎么配置?
确保你的 XML 文件放在 resources 目录下,并在 mybatis-config.xml 中使用相对路径引用:
<mapper resource="mapper/UserMapper.xml"/>
问题3:为什么不能拿到数据?返回null?
可能原因:
- 表字段和类属性名称不一致
- 查询SQL有误或数据不存在
- 接口方法未正确绑定SQL
建议:打印SQL语句、检查数据库内容、使用日志工具跟踪调用链路。
六、学习建议:接下来怎么学更好?

掌握了MyBatis的基础之后,建议你继续学习以下内容:
1. 进阶技能
- 动态SQL(if、choose、foreach)
- 多表关联查询
- 注解方式开发(@Select、@Insert)
- 使用Spring Boot整合MyBatis
2. 推荐资源
- 官方文档:https://mybatis.org/mybatis-3/
- GitHub 示例项目
- Java后端面试八股文资料
3. 动手练习
尝试自己完成CRUD(增删改查)功能,逐步提升难度。比如做一个学生管理系统、图书借阅系统等小项目。
总结
本教程从零开始,带你一步步认识了 MyBatis 框架,并通过一个完整的例子让你亲手实现了数据库查询操作。希望你能感受到它的便捷与强大。
如果你坚持每天敲几段代码、多做练习,很快就能熟练掌握这项技术!
祝你在Java后端开发的路上越走越远!🚀

评论 0