MyBatis-Plus进阶之字段自动填充

2023-12-15 03:44:56

自动填充有什么用

在我们数据库新增或者修改数据的时候,有一些字段是公有而且必填的,比如新增、修改时间,操作人ID等,这些字段不需要用户传入,但是必填,这就需要我们在代码中填写,由于这些字段在很多表中都存在,如果我们一个一个表去填充,那么相对会比较麻烦,这时候使用自动填充可以帮我们解决

MyBatis-Plus实现自动填充

1、添加注解

在需要自动填充的字段上添加@TableField注解,并配置fill属性

fill属性可以配置FieldFill 下的几种类型,如下所示

public enum FieldFill {
    /**
     * 默认不处理
     */
    DEFAULT,
    /**
     * 插入时填充字段
     */
    INSERT,
    /**
     * 更新时填充字段
     */
    UPDATE,
    /**
     * 插入和更新时填充字段
     */
    INSERT_UPDATE
}

下面是我在实体类的创建时间和更新时间的样例

	 /**
     * 创建时间
     */
    @TableField(value = "createTime",fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "modifyTime",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime modifyTime;

2、自定义MetaObjectHandler接口的实现类

MetaObjectHandler接口最主要的就是以下这两个方法,这两个方法用于定义我们新增和修改对象的字段填充逻辑

	 /**
     * 插入元对象字段填充(用于插入时对公共字段的填充)
     *
     * @param metaObject 元对象
     */
    void insertFill(MetaObject metaObject);

    /**
     * 更新元对象字段填充(用于更新时对公共字段的填充)
     *
     * @param metaObject 元对象
     */
    void updateFill(MetaObject metaObject);

我们实现MetaObjectHandler接口,并实现以上两个方法完成字段填充

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 新增填充策略
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        if (metaObject.hasGetter("createTime")) {
            // 起始版本 3.3.0(推荐使用)
            this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        }
        if (metaObject.hasGetter("modifyTime")) {
            this.strictInsertFill(metaObject, "modifyTime", LocalDateTime.class, LocalDateTime.now());
        }
    }

    /**
     * 更新填充策略
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        if (metaObject.hasGetter("modifyTime")) {
            this.strictInsertFill(metaObject, "modifyTime", LocalDateTime.class, LocalDateTime.now());
        }
    }

}

文章来源:https://blog.csdn.net/qq_36551991/article/details/134931094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。