MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率
1. MyBatisPlus简介
- 入门案例
- MyBatisPlus概述
2. 标准数据层开发
- 标准数据层CRUD功能
- 分页功能
3. DQL控制
- 条件查询方式
- 查询投影
- 查询条件设定
- 字段映射与表名映射
4. DML控制
- id自增策略控制(Insert)
- 多记录操作(Delete、Select)
- 逻辑删除(Delete/Update)
- 乐观锁(Update)
5. 快速开发
- 代码生成器
一
1-1 入门案例
-
创建新模块,选择Spring初始化,并配置模块相关基础信息
-
选择当前模块需要使用的技术集(仅保留JDBC)
-
手动添加mp起步依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
- 设置Jdbc参数(application.yml)
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1?serverTimezone=UTC
username: root
password: 123456
- 制作实体类与表结构(类名与表名对应,属性名与字段名对应)
- 定义数据接口,继承BaseMapper
- 测试类中注入dao接口,测试功能
二
2-1 标准数据层CRUD功能
- Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2-2 分页功能
- MP分页查询功能
-
设置分页拦截器作为Spring管理的bean
-
执行分页查询
- 开启日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
三
3-1 条件查询方式
- 条件查询——设置查询条件
QueryWrapper<User> qw = new QueryWrapper<User>();
//查询年龄大于等于18岁,小于65岁的用户
qw.lambda().lt(User::getAge,65).ge(User::getAge,18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
- 条件查询——组合查询条件
- 条件查询——null值处理
3-2 查询投影
3-3 查询条件设定
- 范围匹配(> 、 = 、between)
- 模糊匹配(like)
- 空判定(null)
- 包含性匹配(in)
- 分组(group)
- 排序(order)
3-4 字段映射与表名映射
四
4-1 id生成策略控制
-
参数解释
AUTO(0):使用数据库id自增策略控制id生成
NONE(1):不设置id生成策略
INPUT(2):用户手工输入id
ASSIGN_ID(3):雪花算法生成id(可兼容数值型与字符串型)
ASSIGN_UUID(4):以UUID生成算法作为id生成策略 -
全局配置
mybatis-plus:
global-config:
banner: false
db-config:
id-type: assign_id
table-prefix: tbl_
4-2 多记录操作
- 按照主键删除多条记录
List<Long> ids= Arrays.asList(new Long[]{2,3});
userDao.deleteBatchIds(ids);
- 根据主键查询多条记录
List<Long> ids= Arrays.asList(new Long[]{2,3});
List<User> userList = userDao.selectBatchIds(ids);
4-3 逻辑删除
- 删除操作业务问题:业务数据从数据库中丢弃
- 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中
不要直接删除数据库记录,用新的字段标记是否处于删除状态
-
数据库表中添加逻辑删除标记字段
-
实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
public class User {
private Long id;
@TableLogic
private Integer deleted;
}
- 配置逻辑删除字面值
db-config:
id-type: assign_id
table-prefix: tbl_
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
4-4 乐观锁
- 数据库表中添加锁标记字段
- 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
public class User {
private Long id;
@Version
private Integer version;
}
- 配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor() {
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mpInterceptor;
}
}
- 使用乐观锁机制在修改前必须先获取到对应数据的verion方可正常进行
@Test
void testUpdate () {
//先查询数据,获取到version数据
User user = userDao.selectById(1L);
//执行数据修改操作
user.setName("Tom and Jerry");
userDao.updateById(user);
}
五
5-1 代码生成器(了解)