当在对数据做更新时,都希望这条记录没有被别人更新,如果同时修改该数据的客户端不多的情况下,在数据库层面使用乐观锁是个不错的选择
MyBatis-Plus作为比较成熟的ORM框架,也配备了其乐观锁插件

实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

使用

SpringBoot配置:

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

数据库表添加version字段

字段名不一定是version,可随意设置,支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime

实体类version字段添加@version注解

更新失败

如果更新操作影响的数据行数为0,表示更新失败,可以根据业务需求做后续处理。对于幂等性接口,如果更新失败,说明有并发操作已经成功,可以直接返回成功