官方文档-乐观锁插件:https://baomidou.com/pages/0d93c0/#optimisticlockerinnerinterceptor
在表中添加字段 “version” 来控制版本。
ALTER TABLE `t_user`
ADD COLUMN `version` int(11) NOT NULL DEFAULT 1 COMMENT '版本号';
在实体类的字段上加上@Version注解。
/**
* 之后每修改一次+1
*/
@Version
private Integer version;
OptimisticLockerInnerInterceptor
:当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
@Configuration
public class MyBatisPlusConfig {
/**
* 注册插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 1.添加分页插件
PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor();
// 设置数据库方言类型
pageInterceptor.setDbType(DbType.MYSQL);
// 下面配置根据需求自行设置
// 设置请求的页面大于最大页后操作,true调回到首页,false继续请求。默认false
pageInterceptor.setOverflow(false);
// 单页分页条数限制,默认无限制
pageInterceptor.setMaxLimit(500L);
interceptor.addInnerInterceptor(pageInterceptor);
//2.乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
@Test
public void testVersion() {
System.out.println(("----- 测试版本号 method test ------"));
UserDO userDO1 = userService.getById(11L);
userDO1.setUserName("赵云1-版本号");
userDO1.setAge(21);
UserDO userDO2 = userService.getById(11L);
userDO2.setUserName("赵云2-版本号");
userDO2.setAge(22);
boolean update1 = userService.updateById(userDO1); //修改ok,版本号+1
boolean update2 = userService.updateById(userDO2); //版本号不匹配,修改失败
System.out.println("update1 = " + update1);
System.out.println("update2 = " + update2);
}
– 求知若饥,虚心若愚。