MybatisPlus实现自动填充(表字段创建、修改时间自动填写)、version乐观锁

mysql随机生成id

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    //@TableId(type = IdType.ID_WORKER) //mp自带策略,生成19位值,数字类型使用这种策略,比如long
    //@TableId(type = IdType.ID_WORKER_STR) //mp自带策略,生成19位值,字符串类型使用这种策略
    @TableId(type = IdType.ID_WORKER)
    private Long id;

一、实体类加上注解

    //自动填充
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

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

二、加上消息处理机制类

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    //使用mp实现添加操作,执行此方法
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    //使用mp实现修改操作,执行此方式
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

 三、version乐观锁

实体类:

   @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;//版本号

消息处理机制类:(初始化version为1)

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    //使用mp实现添加操作,执行此方法
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);

        this.setFieldValByName("version",1,metaObject);
    }

配置类:

@Configuration
public class Mpconfig {
    /**
     * 旧版
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

测试类:(进行修改操作,version进行递增)

    //乐观锁
    @Test
    public void optimisticLockerTest(){
        User user = userMapper.selectById(1414578042713444353L);
        user.setName("小胡");
        userMapper.updateById(user);
    }

 

posted @ 2021-07-12 21:06  64Byte  阅读(418)  评论(0编辑  收藏  举报