欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis-Plus之自动填充(数据库表中更新,创建时间)

程序员文章站 2024-03-23 20:13:52
...
  • 创建时间,修改时间,这些操作一遍都是自动化完成的,我们不希望手动更新。
  • 阿里巴巴开发手册:所有的数据库表:gmt_create,gmt_modified几乎所有的表都要配置上,而且需要自动化。

方式一:数据库级别:

  • 但是最好不要这样做,因为如果我们工作了,最好不要修改数据库
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
  • 每次向表中插入数据时,不需要插入create_time这一列的值,因为它有默认值,它会自动填充的。
  • 再次测试插入方法时:
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
  • 为什么只有最后一条语句实现插入时间?
    因为我们在实体类中没有添加创建和更新时间字段。

方式二:代码级别:

  • 删除数据库的默认值和更新操作:
    就是把时间字段的设置都取消掉,只留时间字段。
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
  • 把之前写的取消掉,在实体类属性添加注解:
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
  • 查看TableField的源码发现:
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
  • 编写处理器处理这个注解:
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
  • 官网上填写如下:
@Slf4j@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
        /* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
        //this.setFieldValByName("operator", "Jerry", metaObject);
        //this.setInsertFieldValByName("operator", "Jerry", metaObject);
    }


    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
        /* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
        //this.setFieldValByName("operator", "Tom", metaObject);
        //this.setUpdateFieldValByName("operator", "Tom", metaObject);
    }}
  • 再次执行插入测试:
    Mybatis-Plus之自动填充(数据库表中更新,创建时间)
相关标签: Mybatis Plus