乐观锁
乐观锁:解决某些问题
主要解决:丢失更新—多个人同时修改一条记录,最后提交的会把之前提交的数据的覆盖
典型的应用问题是:秒杀问题,最后一件物品多人同时购买时,可以通过乐观锁解决
乐观锁实现方式:
- 取出记录时,获取当前的version
- 更新时,带上这个version
- 执行时,set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
因此秒杀时,最后一个人操作后,可以通过改变Version的值,让接下来的顾客无法进行购买
从而达到秒杀的操作
1.首先数据库中添加version字段,设置默认值
2.在实体类中添加version属性,添加注释@Version
@Version
private Integer version
3.于此同时还要配置拦截器MPConfig
@Configuration
public Class MpConfig(){
@Bean
public MybatisPlusInterceptor mpInterceptor(){
//定义Mp拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//在拦截器中添加乐观锁拦截器
mpInterceptor.addInterceptor(new OptimisticLockerInnerInterceptor());
return mpInterceptor;
}
}
切记:使用version时要写给与version的当前值,即oldVersion
测试–先查后改
//测试乐观锁
@Test
public void testOptimisticLocker(){
//根据id查询数据
User user = UserMapper.selectById(...);
//进行修改
user.setAge(..);
userMapper.updateById(user);
//如果初始version等于1的话,更改后version加变成2
}