[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| MyBatis | n. | /maɪˈbeɪtɪs/ | 一款流行的 Java 持久层框架,用于简化 JDBC 操作数据库的代码 |
| Plus | prep. | /plʌs/ | 加、增强(MyBatis-Plus 是 MyBatis 的增强工具,在保留原有能力的基础上增加更多便捷功能) |
| Wrapper | n. | /ˈræpə(r)/ | 包装器(MyBatis-Plus 中用 Wrapper 对象封装查询/更新条件,如 QueryWrapper) |
| Entity | n. | /ˈentəti/ | 实体(Entity 类与数据库表对应,一个实体对象对应表中一行数据) |
Lecture01-MyBatisPlus简介
一、回顾:之前操作数据库的痛点
在 Spring 课程中,我们用 JdbcTemplate 操作数据库。回顾一下它的写法:
// ① 查一个员工:SQL 要自己写,列名要手动起别名和属性对应
String sql = """
select emp_id empId,
emp_no empNo,
emp_name empName,
emp_salary empSalary,
emp_birthday empBirthday,
phone_num phoneNum,
dept_id deptId from t_emp where emp_id=?
""";
Employee employee = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class), 3);
// ② 新增一个员工:SQL 和参数要自己拼
String sql2 = """
insert into t_emp(emp_no, emp_name, emp_salary, emp_birthday, phone_num, dept_id)
values (?, ?, ?, now(), ?, ?)
""";
jdbcTemplate.update(sql2, "No.55555", "jerry", 9999.99, "13511112222", 2);
这种写法的痛点非常明显:
- SQL 要自己写,尤其是复杂的条件查询,SQL 又长又容易错
- 列名映射要自己处理:数据库的
emp_id要手动起别名empId才能装进实体 - 增删改查的代码大量重复,换个表又要重新写一遍
- 只要 SQL 语法错了,要运行起来才能发现
二、MyBatis-Plus 是什么
MyBatis-Plus(简称 MP)是 MyBatis 的增强工具。官方的定位是:
只做增强不做改变,为简化开发而生。
翻译成人话就是:
- 我们不用自己写 SQL,调用一个方法,框架自动生成 SQL 去执行
- 单表的增、删、改、查,一条 SQL 都不用写
- 复杂的查询条件,用条件构造器(Wrapper)链式拼接,像搭积木一样
- 分页、逻辑删除、乐观锁、自动填充等常用功能,配置一个插件就能用
为什么我们不学 MyBatis 直接学 MyBatis-Plus?
因为 MyBatis 的定位是「SQL 你来写,框架帮你执行」;而 MyBatis-Plus 的定位是「SQL 我来生成,你只管调用方法」。在实际开发中,大部分单表操作直接用 MyBatis-Plus 就够了,手写 SQL 的场景越来越少。所以不需要先学 MyBatis,直接学怎么用 MyBatis-Plus 更高效。
三、同一需求,两种写法对比
以「按姓名模糊查询员工,并按工资降序」为例:
①JdbcTemplate 写法
String sql = """
select emp_id empId, emp_no empNo, emp_name empName, emp_salary empSalary,
emp_birthday empBirthday, phone_num phoneNum, dept_id deptId
from t_emp
where emp_name like ?
order by emp_salary desc
""";
List<Employee> employeeList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class), "%张%");
②MyBatis-Plus 写法
List<Employee> employeeList =
employeeMapper.selectList(new LambdaQueryWrapper<>()
.like(Employee::getEmpName, "张")
.orderByDesc(Employee::getEmpSalary));
对比结果一目了然:
- JdbcTemplate:SQL 字符串 + 参数,写错只有运行才知道
- MyBatis-Plus:方法链 + 实体属性,属性名写错编译期直接报错
四、MyBatis-Plus 能干什么(本教程范围)
本教程只讲最常用、最核心的能力,不讲底层原理:
| 能力 | 说明 | 章节 |
|---|---|---|
| 内置增删改查 | 继承 BaseMapper,方法直接可用,不用写 SQL | 第 4 章 |
| 条件构造器 | 多条件组合查询、模糊查询、排序、分组 | 第 5、6 章 |
| 分页查询 | 一个插件 + 一个 Page 对象 | 第 7 章 |
| 局部更新 | 只更新指定的列 | 第 8 章 |
| 逻辑删除 | 删除不是真删,加个标记 | 第 9 章 |
| 字段自动填充 | 创建时间、更新时间自动维护 | 第 9 章 |
| 乐观锁 | 并发更新时防止数据被覆盖 | 第 10 章 |
| Service 层封装 | 批量操作、链式调用 | 第 11 章 |
五、学习路线图
三个阶段:
- 入门:第 1~4 章,先跑通、会 CRUD
- 查询与更新核心:第 5~8 章,条件构造器 + 分页,工作中 80% 的场景
- 进阶功能:第 9~11 章,逻辑删除、自动填充、乐观锁、Service 层;第 12 章综合实战
六、本章小结
- MyBatis-Plus 是 MyBatis 的增强工具,核心价值是不用写 SQL
- 单表 CRUD、条件查询、分页等常用操作,调用方法即可完成
- 学习路线:入门 → 查询核心 → 进阶功能 → 综合实战
下一章我们开始动手:搭一个 Spring Boot 工程,跑通第一个 MyBatis-Plus 查询。