三 MyBatis-Plus中乐观锁的使用
1.在面试过程中,我们经常会被问道乐观锁,悲观锁!这个其实非常简单!
乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,
再次更新值测试
悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!
乐观锁实现方式:
取出记录时,获取当前 version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
2.乐观锁:1、先查询,获得版本号 version = 1
– A
update user set name = "kuangshen", version = version + 1
where id = 2 and version = 1
– B 线程抢先完成,这个时候 version = 2,会导致 A 修改失败!
update user set name = "kuangshen", version = version + 1
where id = 2 and version = 1
3.给数据库增加version的一个字段
4.在pojo层增加一个字段(注解表示这是一个version)
@Version
private int version;//乐观锁
5.配置
// 扫描我们的 mapper 文件夹
@MapperScan("com.kuang.mapper")
@EnableTransactionManagement @Configuration // 配置类
public class MyBatisPlusConfig {
// 注册乐观锁插件
@Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
6.测试
// 测试乐观锁成功!
@Test public void testOptimisticLocker(){
// 1、查询用户信息
User user = userMapper.selectById(1L);
// 2、修改用户信息
user.setName("kuangshen");
user.setEmail("24736743@qq.com");
// 3、执行更新操作
userMapper.updateById(user); }