使用 MybatisPlus 自动填充,区分 Date 和 LocalDateTime

1,495 阅读1分钟

前言

接手一个项目,使用的 MybatisPlus 但是字段是 Date 类型 自己想要使用 LocalDateTime 类型,且不想改动之前的代码

思路

直接从 MetaObject 这个地方下手

    @Override
    public void insertFill(MetaObject metaObject) {
        Object createTimeField;
        Object updateTimeField;
        Class<?> createTimeType;
        Class<?> updateTimeType;

        createTimeField = this.getFieldValByName("createTime", metaObject);
        updateTimeField = this.getFieldValByName("updateTime", metaObject);

        createTimeType = metaObject.getGetterType("createTime");
        updateTimeType = metaObject.getGetterType("updateTime");

        if (isNull(createTimeField)) {
            if (createTimeType.equals(Date.class)) {
                this.strictInsertFill(metaObject,"createTime", Date::new,Date.class);
            } else if (createTimeType.equals(LocalDateTime.class)){
                this.strictInsertFill(metaObject,"createTime", LocalDateTime::now,LocalDateTime.class);
            }
        }

        if (isNull(updateTimeField)){
            if (updateTimeType.equals(Date.class)) {
                this.strictInsertFill(metaObject,"updateTime", Date::new,Date.class);
            } else if (updateTimeType.equals(LocalDateTime.class)){
                this.strictInsertFill(metaObject,"updateTime", LocalDateTime::now,LocalDateTime.class);
            }
        }

        this.setFieldValByName("deleted", 0, metaObject);
    }

通过 metaObject.getGetterType() 这个方法拿到字段的类型,再判断

结尾

本文内容不多,希望能给之后也遇到这个情况的同学提供一个方法