当在对数据做更新时,都希望这条记录没有被别人更新,如果同时修改该数据的客户端不多的情况下,在数据库层面使用乐观锁是个不错的选择
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,表示更新失败,可以根据业务需求做后续处理。对于幂等性接口,如果更新失败,说明有并发操作已经成功,可以直接返回成功