一、主要适用场景
意图:
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
二、注解实体字段 @Version 必须要!
@Version
private Integer version;
特别说明:
支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下 newVersion = oldVersion + 1
newVersion 会回写到 entity 中
仅支持 updateById(id) 与 update(entity, wrapper) 方法
在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
三、配置
<bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor"></bean>
或
@Bean
public OptimisticLockerInterceptor optimisticLoker() {
return new OptimisticLockerInterceptor();
}
四、案例
@RequestMapping("/upd2")
public void upd2() {
User user=new User();
user.setId(13L);
user.setName("张洋小朋友");
user.setAge(13);
user.setVersion(1);
if( userMapper.updateById(user)>0){
System.err.println("更新成功");
}
else {
System.err.println("被其他人更新");
}
}