踩坑:
直接實現該接口,發現進入該類后的entity已經重新處理updateTime了,但是更新數據庫的時候,卻不帶updateTime更新。
原因:
由於對該接口等認識不足導致。
解決方案:
實體類中需要添加注解:fill = FieldFill.INSERT_UPDATE
代碼:
/** * 更新時間 */ @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private Long updateTime;
-
/** * 新增,更新時,自動更新字段 */ @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; } }