1、创建实体类,实体类上加上版本号字段,同时加上@version注解
@Data
@Builder
@TableName(value = "tb_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String userNo;
private String nickname;
private String email;
private String phone;
private Integer gender;
private LocalDateTime birthday;
private Integer isDelete;
private LocalDateTime createTime;
private LocalDateTime updateTime;
@Version
private Integer version; // 版本号
}
2、数据库加上对应的版本号字段
ALTER TABLE tb_user ADD COLUMN version INT DEFAULT 0 NOT NULL;
3、mybatis-plus加上乐观锁配置信息
/**
* mybatis-plus的配置
* */
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 配置乐观锁实现
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
4、单测测试
先读再修改,当版本号不一致的时候会抛出异常,根据业务判断是否需要重试
@Test
public void testUserUpdate() {
User user = userService.getById(1);
user.setNickname("version1");
boolean b = userService.updateById(user);
if (b) {
System.out.println("更新成功");
}else {
System.out.println("更新失败");
}
}