1. 自动填充 

  Mybatis-plus中可以使用注解对实体类中的一些时间属性自动填充。

 

  1. 实体类上使用自动填充注解

@TableName("uuser")
@Data
public class User {
    @TableId(value = "uid",type = IdType.AUTO)
    private Long id;
    @TableField("name")
    private String username;
    private Integer age;
    private String email;

    private SexEnum sex;

    @TableLogic
    private Integer isDeleted;

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

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

 

  2. 创建类实现 MetaObjectHandler, 并实现方法

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    //mp执行添加时,整个方法被执行
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Timestamp(System.currentTimeMillis()),metaObject);
        this.setFieldValByName("updateTime",new Timestamp(System.currentTimeMillis()),metaObject);
    }

    //mp执行更新时,整个方法被执行
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Timestamp(System.currentTimeMillis()),metaObject);

    }
}

 

  3. 测试添加

    @Test
    void testAdd(){
        User user = new User();
        user.setUsername("liuliu");
        user.setAge(23);
        user.setEmail("liuliu@qq.com");
        int result = userMapperr.insert(user);
        System.out.println("result " + result);
    }

  当插入时没有设置时间属性,但是创建时间属性和更新时间属性也会被自动填充

 

   4. 测试更新

    @Test
    void testUpdate1(){
        User user = new User();
        user.setUsername("gugu");
        user.setId(1517147456805093382L);
        int result = userMapperr.updateById(user);
        System.out.println("result " + result);
    }

  更新时没有设置时间,更新时间属性会被自动更新

 

2. 乐观锁

  当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

  乐观锁实现方式:

  取出记录时,获取当前version;更新时,带上这个version;执行更新时, set version = newVersion where version = oldVersion;如果version不对,就更新失败

  

  乐观锁实现流程

   (1)在实体类上添加@version注解

    //mp实现乐观锁
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;

  (2)在数据库中添加version字段;

  (3)创建配置类,注册乐观锁插进

@Configuration
@MapperScan("com.lewang.mapper")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //注册乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

  (4)测试

    @Test
    void testAdd(){
        User user = new User();
        user.setUsername("huihui");
        user.setAge(23);
        user.setEmail("huihui@qq.com");
        int result = userMapperr.insert(user);
        System.out.println("result " + result);
    }
    @Test
    void testOptimisticLocker(){
        User user = userMapperr.selectById(1517147456805093383L);
        user.setUsername("hehe");
        int result = userMapperr.updateById(user);
        System.out.println(result);
    }

  先添加一个用户,version会自动填充1,当执行更新后,vesion会自动加1;

 

posted on 2022-08-18 22:51  homle  阅读(171)  评论(0编辑  收藏  举报