淘先锋技术网

首页 1 2 3 4 5 6 7

一、主要适用场景
意图:
当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁实现方式:

取出记录时,获取当前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("被其他人更新");
        }
    }