MyBatis-plus 自動填充MetaObjectHandler


MyBatis-plus 自動填充MetaObjectHandler

背景
在項目中經常遇到一些數據需要自動填充,填充方法都是同一種規則,例如創建時間等。

1 自動填充方法配置
1.1 實體類添加注解
注解:

 #新增注解
 @TableField(fill = FieldFill.INSERT)
 #更新注解
 @TableField(fill = FieldFill.INSERT_UPDATE)

實體類代碼


@Data
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 搜索值
     */
    @TableField(exist = false)
    private String searchValue;

    /**
     * 創建者
     */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 創建時間
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新者
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 更新時間
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 備注
     */
    @TableField(exist = false)
    private String remark;

    /**
     * 請求參數
     */
    @TableField(exist = false)
    private Map<String, Object> params;


    public Map<String, Object> getParams() {
        if (params == null) {
            params = new HashMap<>();
        }
        return params;
    }

    public void setParams(Map<String, Object> params) {
        this.params = params;
    }
}

1.2 在handler包下實現元對象處理器接口

實現MetaObjectHandler 接口


/**
 * 通用參數填充實現類
 * <p>
 * 如果沒有顯式的對通用參數進行賦值,這里會對通用參數進行填充、賦值
 *
 * @author lhh
 */
@Configuration
public class DateMetaObjectHandler implements MetaObjectHandler {
    /**
     * 是否開啟了插入填充
     */
    @Override
    public boolean openInsertFill() {
        return true;
    }

    /**
     * 是否開啟了更新填充
     */
    @Override
    public boolean openUpdateFill() {
        return true;
    }

    /**
     * 新增
     *
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
            BaseEntity baseDO = (BaseEntity) metaObject.getOriginalObject();
            Date current = new Date();
            // 創建時間為空,則以當前時間為插入時間
            if (Objects.isNull(baseDO.getCreateTime())) {
                baseDO.setCreateTime(current);
            }
            Long userId = SecurityUtils.getUserId();
            // 當前登錄用戶不為空,創建人為空,則當前登錄用戶為創建人
            if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreateBy())) {
                baseDO.setCreateBy(userId.toString());
            }
        }
    }

    /**
     * 更新
     *
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新時間為空,則以當前時間為更新時間
        Object modifyTime = getFieldValByName("updateTime", metaObject);
        if (Objects.isNull(modifyTime)) {
            setFieldValByName("updateTime", new Date(), metaObject);
        }
        // 當前登錄用戶不為空,更新人為空,則當前登錄用戶為更新人
        Object modifier = getFieldValByName("updateBy", metaObject);
        String userName = SecurityUtils.getUsername();
        if (Objects.nonNull(userName) && Objects.isNull(modifier)) {
            setFieldValByName("updateBy", userName, metaObject);
        }
    }
}

配置好后公共字段就自動填充上去了 公共字段在 MetaObjectHandler 的實現接口中處理的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM