• 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;
          }
      }
  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/exmyth/p/14304803.html
Copyright © 2020-2023  润新知