老师,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