小书MybatisPlus第9篇-常用字段默认值自动填充

栏目: IT技术 · 发布时间: 5年前

内容简介:本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下:需求案例:在插入数据的时候自动填充createTime和updateTime为当前插入数据的时间,在数据更新的时候修改updateTime为修改数据的时间。不需要人为的手动赋值。

本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下:

一、填充字段处理

需求案例:在插入数据的时候自动填充createTime和updateTime为当前插入数据的时间,在数据更新的时候修改updateTime为修改数据的时间。不需要人为的手动赋值。

  • 在数据库表层面需要先添加2个日期类型的字段create_tme和update_time

小书MybatisPlus第9篇-常用字段默认值自动填充

  • 使用@TableField注解标记实体类中的哪些字段需要填充:
@Data
public class User {
    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;
}

FieldFill是一个枚举,用于指定在何种情况下会自动填充,有如下几种可选值:

  • DEFAULT:默认不处理
  • INSERT:插入时自动填充字段
  • UPDATE:更新时自动填充字段
  • INSERT_UPDATE:插入和更新时自动填充字段

二、自定义填充默认数值

编写公共字段填充处理器类,该类继承了MetaObjectHandler类,重写 insertFill和updateFill方法,我们在这两个方法中获取需要填充的字段以及默认填充的值。

  • 填充处理器MyMetaObjectHandler在Spring Boot中需要声明@Component或@Bean注入
  • strictInsertFill和strictUpdateFill方法第二个参数写的是实体类里的属性名,不是对应数据库字段名。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
 
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }
 
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }
}

如果是3.3.0后面的版本,比如3.3.1.8,也可以改用下面更简单的写法(3.3.0不要用该方法,有bug)

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
 
    @Override
    public void insertFill(MetaObject metaObject) {
        this.fillStrategy(metaObject, "createTime", new Date());
        this.fillStrategy(metaObject, "updateTime", new Date());
    }
 
    @Override
    public void updateFill(MetaObject metaObject) {
        this.fillStrategy(metaObject, "updateTime", new Date());
    }
}

在一些比较旧的版本,为填充字段设置值的API如下,3.3.0之后已经不建议使用

this.setFieldValByName("createTime",new Date(),metaObject);
 this.setFieldValByName("updateTime",new Date(),metaObject);

三、开始测试

  • 插入一条数据,注意我们没有为createTime和updateTime赋值
@Test
public void testInsert() {
  User user = new User();
  user.setName("字母哥");
  user.setAge(18);

  userMapper.insert(user);
}

但是运行的结果是:createTime和updateTime被自动赋值

小书MybatisPlus第9篇-常用字段默认值自动填充
  • 根据Id更新一条数据,注意我们没有为updateTime赋值
@Test
public void testUpdate() {
  User user = new User();
  user.setId(1287387821681790977L);
  user.setName("字母哥&curry");
  user.setAge(18);

  userMapper.updateById(user);
}

但是运行的结果是:updateTime在执行数据记录修改操作时被自动赋值

小书MybatisPlus第9篇-常用字段默认值自动填充

欢迎关注我的博客,里面有很多精品合集

  • 本文转载注明出处(必须带连接,不能只转文字): 字母哥博客

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力!。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

云攻略

云攻略

马克·贝尼奥夫、卡莱尔·阿德勒 / 徐杰 / 海天出版社 / 2010年8月 / 36.00元

Apple、Google、甲骨文、腾讯 都已投入了云的怀抱, 你还在等什么? 快来加入我们! 最初,Salesforce.com 只是一间小小的租赁公寓 在短短10年内 它已成长为 世界上发展最快、最具创新力的 产业变革领导者 曾经,这是个软件为王的时代。 现在,这是个云计算的新时代。 NO SOFTWARE 抛弃软件的......一起来看看 《云攻略》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具