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;
        }
    }

     

 

posted @ 2021-01-20 20:16  牧之丨  阅读(580)  评论(0编辑  收藏  举报