Mybatis-plus乐观锁
大约 1 分钟
Mybatis-plus乐观锁
什么是乐观锁
乐观锁:顾名思义十分乐观,他总是认为不会出现问题,无论干什么都不去上锁,如果出现了问题,再次更新值测试
与之相对的是悲观锁
悲观锁:顾名思义十分悲观,他认为总是会出现问题,无论干什么都会上锁再去操作
乐观锁的机制:
乐观锁的实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时,set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
乐观锁:1. 先查询,获得版本号 version = 1
# --A
update user set name = "huo", version = version +1
where id = 2 and version = 1
# --B 线程抢先完成,这个时候 version = 2,会导致A 修改失败
update user set name = "huo", version = version +1
where id = 2 and version = 1乐观锁的使用
测试以下MP的乐观锁插件:
- 给数据库中增加version字段
- 实体类添加相应version字段,加上@Version注解
- 注册组件
@MapperScan("com.dreamingnotes.mapper") // 扫描mapper文件夹 @EnableTransactionManagement // 开启事务管理 @Configuration // 配置类 public class MyBatisPlusConfig { // 注册乐观锁插件 @Bean public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } }
