MyBatis Plus 教程
欢迎学习 MyBatis Plus!本教程将带你从零基础开始,全面掌握 MyBatis Plus 框架的核心功能和实战技能。
什么是 MyBatis Plus?
MyBatis Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了通用的 CRUD 操作、强大的条件构造器、代码生成器等功能,大大减少了开发人员的工作量。
核心特性
| 特性 | 说明 |
|---|---|
| 无侵入 | 只做增强不做改变,引入不会对现有工程产生影响 |
| 强大的 CRUD | 内置通用 Mapper、Service,少量配置即可实现单表大部分 CRUD 操作 |
| 支持 Lambda | 通过 Lambda 表达式方便编写各类查询条件 |
| 支持主键自动生成 | 支持多达 4 种主键策略 |
| 内置分页插件 | 基于 MyBatis 物理分页,配置好插件后即可使用 |
| 内置代码生成器 | 采用代码或 Maven 插件可快速生成 Mapper、Model、Service、Controller 层代码 |
| 内置性能分析插件 | 可输出 SQL 语句及其执行时间 |
| 内置全局拦截插件 | 提供全表 delete、update 操作智能分析阻断 |
MyBatis vs MyBatis Plus
| 对比项 | MyBatis | MyBatis Plus |
|---|---|---|
| XML 配置 | 需要编写大量 XML | 大部分情况无需 XML |
| CRUD 操作 | 需要手写 SQL | 内置通用 CRUD |
| 分页功能 | 需要手写分页 SQL | 内置分页插件 |
| 代码生成 | 无内置 | 内置代码生成器 |
| 条件构造 | 手写动态 SQL | 提供 Wrapper 条件构造器 |
| 多租户 | 需要自己实现 | 内置多租户支持 |
为什么学习 MyBatis Plus?
1. 提高开发效率
使用 MyBatis Plus 可以显著减少样板代码:
// 传统 MyBatis 需要编写
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);
@Insert("INSERT INTO user(name, age, email) VALUES(#{name}, #{age}, #{email})")
int insert(User user);
// MyBatis Plus 继承 BaseMapper 即可
public interface UserMapper extends BaseMapper<User> {
// 无需编写任何方法,自动拥有 CRUD 功能
}
2. 强大的条件构造器
复杂查询变得简单直观:
// 查询年龄大于 18 且名字包含 "张" 的用户,按年龄降序
List<User> users = userMapper.selectList(
new LambdaQueryWrapper<User>()
.gt(User::getAge, 18)
.like(User::getName, "张")
.orderByDesc(User::getAge)
);
3. 企业级应用广泛
MyBatis Plus 在国内企业中应用广泛,是 Java 后端开发的必备技能之一。
环境准备
Maven 依赖
<dependencies>
<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- 数据库驱动(以 MySQL 为例) -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok(可选,简化代码) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
配置文件
# application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: auto
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
快速开始
创建实体类:
@Data
@TableName("t_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableLogic
private Integer deleted;
}
创建 Mapper 接口:
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
使用示例:
@SpringBootTest
class QuickStartTest {
@Autowired
private UserMapper userMapper;
@Test
void testInsert() {
User user = new User();
user.setName("张三");
user.setAge(25);
user.setEmail("[email protected]");
int result = userMapper.insert(user);
System.out.println("插入成功,影响行数:" + result);
System.out.println("自动生成的 ID:" + user.getId());
}
@Test
void testSelectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
@Test
void testSelectList() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
@Test
void testUpdate() {
User user = new User();
user.setId(1L);
user.setAge(26);
int result = userMapper.updateById(user);
System.out.println("更新成功,影响行数:" + result);
}
@Test
void testDelete() {
int result = userMapper.deleteById(1L);
System.out.println("删除成功,影响行数:" + result);
}
}
教程目录
本教程涵盖从入门到进阶的完整内容:
基础入门
- 基础 CRUD 操作 - 插入、删除、更新、查询操作
核心功能
知识速查
- 速查表 - MyBatis Plus 常用 API 速查
学习建议
1. 前置知识
学习 MyBatis Plus 前需要掌握:
- Java 基础:面向对象、集合框架、Lambda 表达式
- Spring Boot:依赖注入、配置管理、自动装配
- MyBatis 基础:了解 MyBatis 的基本概念和使用方式
- SQL 基础:增删改查、条件查询、多表关联
2. 学习路径
基础阶段 核心阶段 进阶阶段 实战阶段
│ │ │ │
▼ ▼ ▼ ▼
环境配置 → 基础 CRUD → 代码生成器 → 项目实战
快速开始 → 条件构造器 → 自定义扩展 → 性能优化
MyBatis基础 → 分页查询 → 插件机制 → 最佳实践
3. 实践建议
- 动手实践:每行代码都要亲自敲一遍
- 对比学习:对比 MyBatis 和 MyBatis Plus 的差异
- 阅读源码:了解核心功能的实现原理
- 项目实战:在实际项目中应用所学知识
参考资源
官方资源
学习资源
准备好了吗?
准备好开始学习 MyBatis Plus 了吗?本教程将带你深入了解 MyBatis Plus 的核心功能和最佳实践。点击下一章开始你的学习之旅!