Mybatis-Plus乐观锁
1、什么是乐观锁
乐观锁:故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试
悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!
我们这里主要讲解乐观锁机制!
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时,set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
2、乐观锁
1、先查询,获得版本号version = 1
-- A
update user set name = "aaa", version = version + 1
where id = 2 and version = 1
--B
线程抢先完成,这个时候version = 2,会导致A 修改失败!
update user set name = "aaa", version = version + 1
where id = 2 and version = 1
1、为数据库添加version字段
2、实体类添加注解
@Version//乐观锁注解
private Integer version;
3、注册注解
@MapperScan("com.xys.Mapper")
@EnableTransactionManagement
@Configuration//配置类
public class MybatisConfig {
//注册乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
4、测试乐观锁
@Test
void OptimisticLocker(){
//查询用户信息
user user1=mapper.selectById(1L);
//修改用户信息
user1.setName("xys");
user1.setEmail("95788@afe");
//执行更新操作
mapper.updateById(user1);
}
@Test
void OptimisticLocker1(){
//线程1
user user1=mapper.selectById(1L);
user1.setName("xys111");
user1.setEmail("95788@afe");
//线程2,模拟插队
user user2=mapper.selectById(1L);
user2.setName("xys222");
user2.setEmail("95788@afe");
mapper.updateById(user2);
mapper.updateById(user1);
}