老师,metaObject.hasSetter在insert时能判断字段是否存在,在update时不判断统一返回为true
老师,按照教程,我在代码中,在insertFill和updateFill中都对要自动填充的字段进行了判断如下
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasSetter("createTime")) {
log.info("自动插入");
LocalDateTime current = LocalDateTime.now();
this.setInsertFieldValByName("createTime", current, metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
if (metaObject.hasSetter("updateTime")) {
log.info("自动更新字段");
LocalDateTime current = LocalDateTime.now();
this.setUpdateFieldValByName("updateTime", current, metaObject);
}
}经过debug发现,metaObject.hasSetter在insert时,底层调用的是BeanWrapper.hasSetter的方法,能判断是否包含了要设置的字段。
但是在update时,底层调用的是MapWrapper.hasSetter方法,这个方法直接返回true,并不判断是否包含要设置的字段,导致自动metaObject.hasSetter的判断不起作用,如下是debug截图。

我使用的mp版本是3.2.0。更新时调用的方法是updateById,不明白为什么在更新时没有调用BeanWrapper方法,而是调用MapWrapper