趣事:前段时间实习,有一个修改状态的接口要我写,心想着要写出优雅的代码,即使这是一个小小的接口,本着身在小厂心系大厂的想法出发,考虑并发问题必不可少!于是我自己写sql更新、查询语句(for update还有乐观锁版本控制的那种),美滋滋的就交差了,后来我在整理mybatisPlus代码的时候,发现原来乐观锁、逻辑删除这一切,mybatisPlus都是可以自动配置的。蜜汁尴尬😅,但是居然项目经理也和我一样是个呆瓜,这就说明了一些东西了。
本文速览
mybatisPlus进阶之逻辑删除
逻辑删除:也称软删除,在进行删除数据的时候,并不会真正的去删除数据,而是修改状态。
趣事: 开发项目不可或缺流程。商讨需求->编码。那时候接到一个需求说什么软删除某一条数据,项目经理还特意强调好几遍要软删除!软删除!当我真正开始编码的时候,看下配置文件,里面不是都进行了逻辑删除的相关配置嘛!删除=逻辑删除。从点滴之间看的出来公司到底有多水。:
配置插件
/**
* @author: zzh
*/
//逻辑删除插件,删除只会改字段状态
@Bean
public ISqlInjector sqlInjector() {
return new DefaultSqlInjector();
}
实体类添加逻辑删除字段
- 删除:状态为1
- 未删除:状态为0
配法一
@ApiModelProperty(value = "逻辑删除")
@TableLogic(value = "0", delval = "1")
private Integer deleted;
配法二
进行全局的逻辑删除配置
global-config:
db-config:
logic-not-delete-value: 0
logic-delete-value: 1
此时字段加上@TableLogic即可
@ApiModelProperty(value = "逻辑删除")
@TableLogic
private Integer deleted;
逻辑删除测试
在使用remove、deleteById等方法的时候,只会进行状态修改。实际上是update操作
UPDATE goods SET deleted=1 WHERE id=? AND deleted=0
查询操作,根据状态查询
SELECT id,deleted,goods_type_id,price,name,remark,stock,version FROM goods WHERE id=? AND deleted=0
goodsService.remove(new QueryWrapper<Goods>().eq("stock", 10000));
goodsService.remove(31);
goodsMapper.deleteById(30);
mybatisPlus进阶之乐观锁
配置插件
//注册乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
实体类中添加乐观锁字段
字段上加@Version注解,让mybatisPlus知道咱们进行了配置
/**
* @Version mybatisPlus乐观锁自动配置
*/
@ApiModelProperty(value = "版本号")
@Version
private Integer version;
乐观锁测试
Goods byId = goodsService.getById(30);
byId.setPrice(8989D);
byId.setStock(9090);
goodsService.updateById(byId);
UPDATE goods SET goods_type_id=?, price=?, name=?, remark=?, stock=?, version=? WHERE id=? AND version=? AND deleted=0
进行普通的更新操作,可以看到对应执行的sql语句加上了version的控制,每更新一次version++
mybatisPlus进阶之分页
要想用mybatisPlus的分页还需配置一下分页插件
//注册分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
附页(开启sql打印)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
本文代码链接下载:https://github.com/zhangzihang3/-workHarvestCode.git点个statr🙏啦