Mybatisplus实现MetaObjectHandler接口自动更新创建时间更新时间_梦游小草的博客-CSDN博客_metaobjecthandler

踩坑:

    直接实现该接口,发现进入该类后的entity已经重新处理updateTime了,但是更新数据库的时候,却不带updateTime更新。

原因:

    由于对该接口等认识不足导致。

解决方案:

    实体类中需要添加注解:fill = FieldFill.INSERT_UPDATE

代码:

/**  * 更新时间  */@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)private Long updateTime;
/** * 新增,更新时,自动更新字段 */@Componentpublic 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;    }}

原网址: 访问
创建于: 2021-08-04 18:42:58
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论