随笔 - 79,  文章 - 0,  评论 - 1,  阅读 - 45505

 

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   homle  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示