Mybatis Plus 乐观锁的注意细节

527 阅读1分钟

Mybatis Plus 坑爹的乐观锁设置

先看下乐观锁的操作流程(这里只是针对springboot)

1.添加属性配置

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

2.在实体类的字段上加上@Version注解

@Data
public class User {

   @TableId(type = IdType.AUTO)
   private Long id;

   private String name;

   private Integer age;

   private String email;

   @TableField(fill = FieldFill.INSERT)
   private Date createTime;

   @TableField(fill = FieldFill.INSERT_UPDATE)
   private Date updateTime;

   @Version
   @TableField(fill = FieldFill.INSERT) //添加这个是为了在创建的时候赋值为1 如果是 null 就不会执行了
   private Integer version;

}

3.坑爹的在这个位置 当然官网也是有提醒的 但是提醒的有点略显坑

-   **支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime**
-   整数类型下 `newVersion = oldVersion + 1`
-   `newVersion` 会回写到 `entity` 中
-   仅支持 `updateById(id)` 与 `update(entity, wrapper)` 方法
-   **在 `update(entity, wrapper)` 方法下, `wrapper` 不能复用!!!**

示例代码

   // 这个要求是必须得执行getById 之后再执行updatebyid 才生效  如果只是执行其中一个 就不会生效 坑爹中的战斗机啊
    User user = userService.getById(10L);  
    user.setEmail("ceshi@zhaodigroup.cn");
    user.setAge(150);
    user.setName("zhaosi");
    userService.updateById(user);