Mybatis-Plus乐观锁
AI-摘要
Tianli GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
1、前言
- **乐观锁:**就是乐观的锁。当我在操作数据时,我会认为没有任何人会干扰我的操作。也就是没有任何人会操作我正在操作的数据。然后我在需要更改我数据的时候,再来校验我的数据是否与我取出来的数据一致。通常我们会用版本号来标识。0 update 还是不是0 如果是0的话,才操作update,如果不是0,就给提示。抛异常
- **悲观锁:**当我在操作数据时,不管有没有人正在操作这个数据,我都会认为别人要来操作我的数据。所以我会在我操作这个数据时,加上这把锁。synchronize

-
使用步骤

5.1 实体类修改
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User implements Serializable {
private Long id;
private String name;
private String password;
private Integer age;
private String tel;
/**
* 标记该字段为乐观锁字段
*/
@Version
private Integer version;
}
5.2 数据库中添加字段

5.3 添加乐观锁拦截器
@Configuration
public class MybatisPlusConfig {
//定义一个方法,负责返回拦截器对象
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//创建一个MybatisPlus的拦截器对象
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
/*
添加乐观锁拦截器
*/
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
//返回MybatisPlus的拦截器对象
return mybatisPlusInterceptor;
}
}
5.4 执行操作
/**
* 乐观锁
*/
@Test
void testVersion09(){
//模拟前端传入数据
User data = new User();
data.setVersion(0);
data.setId(2L);
data.setName("米津玄师");
data.setAge(18);
//修改前从数据中查询版本号
User user = userMapper.selectById(data.getId());
//对比版本号,如果不匹配则不允许修改
if (user.getVersion() !=data.getVersion()){
log.info("该数据已被修改,请刷新后重新操作!");
return;
}
//如果版本号一致,则执行修改操作
userMapper.updateById(data);
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 leaflei
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果