天天看點

metaObject.hasSetter在updayeFill的時候把實體類中沒有這個字段的值也傳回了true

今早正在開心撸代碼的時候,報了一個錯。

metaObject.hasSetter 在updateFill 方法中

将我原本實體類上沒有的字段 在hasSetter 中也判斷成了true???

什麼問題,難道底層出錯了。

@Override
    public void updateFill(MetaObject metaObject) {
        //是否存在set方法
        boolean hasModifyTime =   metaObject.hasSetter("ModifyTime");
        //拿到updateTime的值
        Object modifyTime = getFieldValByName("ModifyTime", metaObject);

        if (hasModifyTime){
            //有set方法
            if (modifyTime == null) {
                //值為null填充
                setFieldValByName("ModifyTime", new Date(), metaObject);
            }
        }

        boolean hasModifierId = metaObject.hasSetter("ModifierId");
        if(hasModifierId){
           this.setFieldValByName("ModifierId", UserContext.getCurrentUser().getUserId(), metaObject);
        }
    }      

當我檢視了源碼的時候我發現,它是在修改時候隻調用了MapWrapper這個方法。卻沒有調用BeanWrapper。

其實嘗試了兩邊後發現,hasGetTer 的方法也是這樣的問題。

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>

        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>      

繼續閱讀