MybatisPlus学习笔记(二)
自动填充
- 需求:业务中表有更新时间、创建时间、创建人、更新人等字段。可以使用
@TableField(fill = )
来进行自动填充。 - 加了注解的字段会在SQL中预留字段,属性值指定 在进行什么操作的时候需要预留字段。
- 第一步,在字段上添加注解
//插入和更新的时候
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
- 第二步,自定义填充处理器MetaObjectHandler
在config包中,新增自定义填充处理类。
/**
* @author Cagur
* @version 1.0
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//执行插入的时候
this.setFieldValByName("createTime",LocalDateTime.now(),metaObject);
this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
}
}
逻辑删除
mybatis支持逻辑删除,只需要配置好逻辑删除的实体字段名,代表删除的字段值和代表未删除的字段值后即可。
mybatis-plus:
global-config:
db-config:
logic-delete-field: delFlag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
乐观锁
- 需求:并发操作的时候,我们需要保证对数据操作不发生冲突。
- 原理:使用乐观锁时,一般在表中家一个version列,用来记录对每次记录操作的版本。每次对某条记录进行操作,对应version会++。
- 更新操作的时候,先查询version,执行更新时候,
set version = 老版本+1 where version=老版本
- 如果在查询老版本到更新中间有人更新了这条数据,就会更新失败。
- 更新操作的时候,先查询version,执行更新时候,
- 这些更新version的操作由mybatis plus来完成。
配置
第一步,配置类。
/**
* 乐观锁
*/
@Bean
public MybatisPlusInterceptor optimisticLockerInnerInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
第二步,字段加上 @Version
注解。
@Version
private Integer version;
多插件配置问题
前面配置了两个插件:分页插件和乐观锁插件。
不推荐注入两个方法,而是在一个方法中,用add方法添加拦截器。
顺序:
- 多租户、动态表名
- 分页、乐观锁
- sql性能规范、防止全表更新和删除
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 AjaxZhan
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果