Mybatisplus實現MetaObjectHandler接口自動更新創建時間更新時間


踩坑:

    直接實現該接口,發現進入該類后的entity已經重新處理updateTime了,但是更新數據庫的時候,卻不帶updateTime更新。

原因:

    由於對該接口等認識不足導致。

解決方案:

    實體類中需要添加注解:fill = FieldFill.INSERT_UPDATE

 

代碼:

/**
  * 更新時間
  */
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;

 

 

 

  1. /**
     * 新增,更新時,自動更新字段
     */
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
     
        private static String CREATE_TIME = "createTime";
        private static String UPDATE_TIME = "updateTime";
     
        /**
         * 插入使用
         */
        @Override
        public void insertFill(MetaObject metaObject) {
            fillValue(metaObject, CREATE_TIME, () -> getDateValue(metaObject.getSetterType(CREATE_TIME)));
            fillValue(metaObject, UPDATE_TIME, () -> getDateValue(metaObject.getSetterType(UPDATE_TIME)));
        }
     
        @Override
        public void updateFill(MetaObject metaObject) {
            fillValue(metaObject, "et."+UPDATE_TIME, () -> getDateValue(metaObject.getSetterType("et."+UPDATE_TIME)));
        }
        private void fillValue(MetaObject metaObject, String fieldName, Supplier<Object> valueSupplier) {
            if (!metaObject.hasGetter(fieldName)) {
                return;
            }
            Object sidObj = metaObject.getValue(fieldName);
            if (sidObj == null && metaObject.hasSetter(fieldName) && valueSupplier != null) {
                setFieldValByName(fieldName, valueSupplier.get(), metaObject);
            }
        }
     
        private Object getDateValue(Class<?> setterType) {
            if (Date.class.equals(setterType)) {
                return new Date();
            } else if (LocalDateTime.class.equals(setterType)) {
                return LocalDateTime.now();
            } else if (Long.class.equals(setterType)){
                return System.currentTimeMillis();
            }
            return null;
        }
    }

     

 


免責聲明!

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



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