MyBatis基础教程:Java持久层框架入门
大家好,我是技术团队的培训负责人,过去五年里带过上百名应届生从零开始学习后端开发。每次看到新同学面对数据库操作时一脸茫然的样子,我就想起自己刚入行时的窘迫——那时候连“持久层”是什么都不知道!今天写这篇教程,就是想用最通俗的方式,带你轻松入门 MyBatis 这个 Java 中最常用的持久层框架。
📌 什么是持久层?
简单说,就是程序把数据“持久”地存到硬盘(比如数据库)里的那一部分代码。没有它,你的数据关掉程序就没了!
为什么选择 MyBatis?
在 Java 后端开发中,我们经常需要把对象(比如用户信息)存到数据库里,或者从数据库读取出来。手动写 SQL、拼接字符串、处理连接……又麻烦又容易出错。
MyBatis 就是来帮我们自动化这些重复工作的工具。它让你用简单的 XML 或注解,就把 Java 对象和数据库记录“映射”起来,省去大量样板代码。
💡 我当初学的时候,第一次用 MyBatis 查出一条用户数据,激动得差点拍桌子——原来数据库操作可以这么简单!
环境准备(手把手教你搭建)
第一步:确认你已安装以下工具
| 工具 | 版本建议 | 作用 |
|---|---|---|
| JDK | 1.8 或更高 | Java 运行环境 |
| Maven | 3.6+ | 项目依赖管理 |
| IDE | IntelliJ IDEA(推荐)或 Eclipse | 写代码的编辑器 |
| MySQL | 5.7+ 或 8.0 | 本地数据库 |
⚠️ 注意:虽然题目提到了 Python、爬虫、区块链、Spring Boot,但 MyBatis 是 纯 Java 技术,和 Python 无关。不过别担心,我会在最后说明它们的关系。
第二步:创建 Spring Boot 项目(集成 MyBatis)
我们用 Spring Boot 快速搭建项目,因为它能自动配置很多东西,特别适合新手。
选择:
- Project: Maven
- Language: Java
- Spring Boot: 3.x(或 2.7.x)
- Dependencies: 添加 Spring Web、MyBatis Framework、MySQL Driver
点击 "Generate" 下载 ZIP,解压后用 IDEA 打开。
第三步:配置数据库
假设你本地有一个 MySQL 数据库,新建一个叫 mybatis_demo 的库:
CREATE DATABASE mybatis_demo CHARACTER SET utf8mb4;
USE mybatis_demo;
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
然后在 application.yml(或 application.properties)中添加配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&serverTimezone=UTC
username: root
password: your_password # 替换成你的密码
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
configuration:
map-underscore-to-camel-case: true # 自动将下划线转驼峰(如 user_name → userName)
核心概念:用大白话讲清楚
1. 实体类(Entity)
就是 Java 对象,对应数据库的一张表。
public class User {
private Integer id;
private String name;
private String email;
// getter 和 setter 省略(IDEA 可自动生成)
}
2. Mapper 接口
这是 MyBatis 的核心!你只需要定义接口方法,不用写实现类,MyBatis 会自动帮你执行 SQL。
@Mapper
public interface UserMapper {
List<User> findAll();
User findById(Integer id);
void insert(User user);
void update(User user);
void deleteById(Integer id);
}
3. SQL 映射文件(XML)或注解
告诉 MyBatis 每个方法对应的 SQL 是什么。
方式一:用 XML(推荐,SQL 集中管理)
在 resources/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.demo.mapper.UserMapper">
<select id="findAll" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
<select id="findById" resultType="com.example.demo.entity.User" parameterType="int">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.demo.entity.User">
INSERT INTO user(name, email) VALUES(#{name}, #{email})
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
UPDATE user SET name=#{name}, email=#{email} WHERE id=#{id}
</update>
<delete id="deleteById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
🔍
namespace必须是 Mapper 接口的全路径名!#{}是安全的参数占位符,防止 SQL 注入。
方式二:用注解(适合简单 SQL)
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user")
List<User> findAll();
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Integer id);
@Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
void insert(User user);
// 其他方法类似...
}
✅ 新手建议:先用 XML,结构清晰,复杂 SQL 也好维护。
实战项目:做一个用户管理 API
目标:通过浏览器访问 /users 能看到所有用户。
步骤 1:编写 Controller
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping
public List<User> getAllUsers() {
return userMapper.findAll();
}
@PostMapping
public String addUser(@RequestBody User user) {
userMapper.insert(user);
return "User added!";
}
}
步骤 2:测试
- 启动 Spring Boot 应用(运行
DemoApplication.main()) - 用 Postman 或 curl 添加一个用户:
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"name":"张三","email":"zhangsan@example.com"}'
- 浏览器访问
http://localhost:8080/users,看到 JSON 数据:
[
{
"id": 1,
"name": "张三",
"email": "zhangsan@example.com"
}
]
✅ 恭喜!你已经完成了第一个 MyBatis + Spring Boot 项目!
常见问题 & 避坑指南
❓ 问题1:启动报错 “Invalid bound statement (not found)”
原因:MyBatis 找不到 XML 文件。
解决方案:
- 确认
UserMapper.xml在resources/mapper/目录下 - 在
application.yml中添加:
mybatis:
mapper-locations: classpath:mapper/*.xml
❓ 问题2:插入数据后 ID 没返回
解决:在 <insert> 标签加属性:
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user(name, email) VALUES(#{name}, #{email})
</insert>
这样 user.getId() 就能拿到自增 ID 了。
❓ 问题3:中文乱码
解决:确保数据库、表、连接都用 utf8mb4 编码,URL 加上:
?useUnicode=true&characterEncoding=utf8
关于 Python、爬虫、区块链、Spring Boot 的说明
我知道题目里提到了这些词,这里统一解释一下,避免混淆:
| 技术 | 和 MyBatis 的关系 | 学习建议 |
|---|---|---|
| Python | 完全不同语言,MyBatis 是 Java 专属 | 先专注 Java 生态 |
| 爬虫 | 通常是 Python 用 requests/Scrapy 做数据采集 | 和数据库存储是两回事 |
| 区块链 | 分布式账本技术,不依赖传统数据库 | 初期无需关注 |
| Spring Boot | MyBatis 最常用的搭档!简化配置 | 强烈建议一起学 |
🧠 我的建议:作为后端新手,先把 Java + Spring Boot + MyBatis + MySQL 这条主线打通。等你能独立做 CRUD 项目后,再拓展 Python(用于脚本/数据分析)或了解区块链概念。
下一步学习路径
深入 MyBatis
- 动态 SQL(
<if>、<foreach>) - 一对一、一对多关联查询
- 缓存机制
- 动态 SQL(
整合更多 Spring Boot 组件
- 分页插件(PageHelper)
- 事务管理(
@Transactional) - 日志监控
项目实战
做一个完整的博客系统 or 电商后台,包含用户、文章、订单等模块。拓展视野
- 了解 JPA/Hibernate(另一种 ORM 框架)
- 学点前端(Vue/React)做全栈
- 再回头看看 Python 爬虫怎么把数据存进你的 MySQL
结语
我带过的应届生里,90% 都卡在“数据库怎么连”、“SQL 怎么写”这些基础问题上。其实只要跨过最初那道坎,后面就会越来越顺。
记住:编程不是背概念,而是动手做。现在就打开你的 IDE,照着教程敲一遍代码——哪怕只跑通一个查询,你也是真正的开发者了!
如果遇到问题,欢迎留言讨论。下期我打算写《MyBatis 动态 SQL 详解》,想看的同学可以点赞催更 😄
🌟 最后一句忠告:不要试图一次性学会所有东西。每天进步 1%,一年后你会感谢今天的自己。

评论 0