乐观锁.png
乐观锁.png
1.乐观锁
主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
2.数据库中添加version字段
ALTER TABLE user
ADD COLUMN version
INT
image.png
3.实体类添加version字段
并添加 @Version 注解
@Version @TableField(fill = FieldFill.INSERT) private Integer version;
4.元对象处理器接口添加version的insert默认值
@Override public void insertFill(MetaObject metaObject) { ...... this.setFieldValByName("version", 1, metaObject); }
特别说明:
支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下 newVersion = oldVersion + 1
newVersion 会回写到 entity 中
仅支持 updateById(id) 与 update(entity, wrapper) 方法
在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
5.在 MybatisPlusConfig 中注册 Bean
创建配置类
package com.atguigu.mybatisplus.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement @Configuration @MapperScan("com.atguigu.mybatis_plus.mapper") public class MybatisPlusConfig { /** * 乐观锁插件 */ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } }