zoukankan      html  css  js  c++  java
  • 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;
          }
      }
  • 相关阅读:
    fmri资源站点
    spm教程
    linux下ntfs硬盘的加载
    Unix网络编程代码 第13章 守护进程和inetd超级服务器
    APUE16章的运行示例16-14
    Linux守护进程详解(init.d和xinetd)
    centos安装g++
    linux下daemon守护进程的实现(以nginx代码为例)
    Linux进程学习(孤儿进程和守护进程)
    Linux之TCPIP内核参数优化
  • 原文地址:https://www.cnblogs.com/exmyth/p/14304803.html
Copyright © 2011-2022 走看看