mybatis_plugins
是mybatis的增强。
拥有一系列的功能:
内置通用Mapper,Service。 支持Lambda调用
支持多种数据库
使用
编写自己的Mapper. extends BaseMapper. 即可使用CRUD 的功能
功能
URL
mysql8.1 以上版本. 配合的URL 需要加上 GMT%2B8.
springBoot 需要 2.1 以上
主键生成
在插入数据时,数据的主键有多种方式生成
数据库主键策略:
AUTO_INCREMENT
是数据库自增长.插入数据的时候,不用传递主键数据
但是
在分库分表的情况下,需要得到上一张表的最后一个ID值,才能主键自增
UUID
每次生成一个UUID,插入到数据库
坏处是,可读性差.如果进行排序的话则不是那么的方便
snowflake
雪花算法
MP支持的一个算法.生成一个Long型的ID.
其中 41bit 作为毫秒数
10bit作为机器ID. 5bit 作为 数据中心. 5bit 是机器ID
12bit 作为毫秒内流水号. 最后一个符号是0
这是一些常用的知识
MP主键策略
设置某个表
在 实体类的ID上添加注解
@TableId(type = IdType.AUTO)
private String id;
AUTO :数据库自增
ID_WORKER: mp策略,生成19位Long 型数字类型的值
ID_WORKER_STR: mp策略,19位字符串类型
INPUT: 自己输入
NONE: 没有策略
UUID: 随机UUID 值
设置所有表
就不在实体类上使用@TableId 注解了
直接在 配置文件中 配置
mybatis-plus.global-config.id-type=auto
即可
自动填充
数据库表有一些字段,比如 create_date,update.
在创建的时候或更新的时候,自动更新这些字段的值
1
在实体类中字段上添加注解
@TableFiled(fill = FieldFill.INSERT): 在插入的时候自动插入其值
@TableFiled(fill = FieldFill.INSERT_UPDATE): 在修改的时候自动填入值
2
@Component
public class MyMetaObjectHandler implements MetaObjectHandlers
{
// 实现俩个方法
@Override
public void insertFill(MetaOBject metaObject){
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("update",new Date(),metaObject);
}
@Override
public void updateFill(MetaOBject metaObject){
this.setFieldValByName("update",new Date(),metaObject);
}
}
乐观锁
MP 同样可以使用乐观锁
乐观锁 主要用户 丢失更新.
使用
1 在 实体类添加字段 version
2 在 myabti-plugin 中配置乐观锁插件
3 添加注解 @Version, 在 version 字段上
4 建立配置类
@Configuration
@MapperScan("cn.nctwo")
public class MpConfig{
// 乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
分页
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
代码
使用 Page类. Page接收俩个参数.第一个是第几页,第二个是每页几条.
使用mapper 进行查询. 讲 page 传递进去.
编写代码
Page page = new Page(1,5);
当前页,每页条数
userMapper.selectPage(page,null)
在使用过程中,会将数据分装到page 对象中
sout(page.getCurrent()): 获取当前页
sout(page.getRecords()): 每页数据记录数
还有上一页和下一页
page.hasNext()
page.hasPrevious()
删除
删除也是有插件的. 主要用于逻辑删除.
添加 删除字段. 通过插件,在删除的时候,自动将值修改为1
配置
1 添加删除字段和注解
@TableLogic
private Integer deleted;
2 配置插件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
3 配置文件
指定了 删除时候字段的值
maybatis-plus.global-config.db-config.logic-delete-value=1
maybatis-plus.global-config.db-config.logic-not-delete-value=1
最后,配置了删除插件之后,我们在查询的时候只能够查询到没有逻辑删除的数据
如果想要查询逻辑删除的数据只能够自己写 SQL 代码查询了
性能
用于显示 SQL语句执行时长
@Bean
@Profile({"dev","test"})
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor per = new PerformanceInterceptor();
// 超过100ms 的sql 不执行
per.setMaxTime(100);
persetFormat(true);
return per;
}
之后我们在 配置文件中配置 使用的文件
条件查询
Wrapper 的体系中我们一般使用 QueryWrapper 进行查询
1 创建 QueryWrapper 对象
有几个 Unicode 码. ge,gt,le,lt .他们别的是: >=,> <=,<
eq: ==,ne: !=
between: 包括边界的
like: 模糊查询
orderByDesc:
last: 最后拼接的SQL
查询指定的列:
wrapper.select(“id”,”name”)