• 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;
          }
      }
  • 相关阅读:
    sql语句中as的用法和作用
    设置国内AndriodSDK代理
    Ionic开发环境搭建
    SpringMvc+Mybatis开发调用存储过程
    SpringMvc的JSON数据交互
    SpringMvc+Mybatis开发需要的jar包
    nested exception is java.lang.NoClassDefFoundError: org/hibernate/validator/resourceloading/ResourceBundleLocator
    SpringMvc错误:HTTP Status 500
    解决在Tomcat中的server.xml中修改了配置,启动后还原的问题
    SpringMvc参数绑定出现乱码解决方法
  • 原文地址:https://www.cnblogs.com/exmyth/p/14304803.html
Copyright © 2020-2023  润新知