一、主要適用場景
意圖:
當要更新一條記錄的時候,希望這條記錄沒有被別人更新
樂觀鎖實現方式:
取出記錄時,獲取當前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("被其他人更新");
}
}