一,乐观锁
乐观锁顾名思义就是在操作时很乐观,认为操作不会产生并发问题(不会有其他线程对数据进行修改),因此不会上锁。但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS(compare
and swap)算法实现。 简单理解:这里的数据,别想太多,你尽管用,出问题了算我怂,即操作失败后事务回滚、提示。
二,
- myatis plus官方文档给出spring boot 的配置:
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
在mybatis-plus的配置中加上即可
三,
- 注解实体字段 @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 不能复用!!!
四,
数据库字段,这里给默认值给初始值给 1 是为了方便
这样乐观锁就配置完成,直接使用即可,配置完成科研写一个简单的修改,在修改的时候回自动带上version
进行累加,查找条件也会带上version,如果没有起作用请查看配置,是否起作用(标题二)