在updayeFill过程中,metaObject.hasSetter如何处理实体类中不存在该字段的值?

2026-05-27 20:071阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计452个文字,预计阅读时间需要2分钟。

在updayeFill过程中,metaObject.hasSetter如何处理实体类中不存在该字段的值?

在编写代码时,遇到了一个问题。在`updateFill`方法中,`metaObject.hasSetter`用于检查实体类上是否存在某个字段。如果实体类上没有这个字段,但在`hasSetter`中却返回了`true`,这是什么问题?为什么难以找到底层的错误呢?

java@Overridepublic void updateFill(Pu pu) { // ... if (metaObject.hasSetter(字段名)) { // 字段存在的情况处理 } else { // 字段不存在的情况处理 } // ...}


今早正在开心撸代码的时候,报了一个错。

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 的方法也是这样的问题。

于是我开始从尝试是不是因为mybatis plus 版本太低的原因?

换了版本到 3.3.1.tmp 版本后。一切正常。

在updayeFill过程中,metaObject.hasSetter如何处理实体类中不存在该字段的值?

<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>

本文共计452个文字,预计阅读时间需要2分钟。

在updayeFill过程中,metaObject.hasSetter如何处理实体类中不存在该字段的值?

在编写代码时,遇到了一个问题。在`updateFill`方法中,`metaObject.hasSetter`用于检查实体类上是否存在某个字段。如果实体类上没有这个字段,但在`hasSetter`中却返回了`true`,这是什么问题?为什么难以找到底层的错误呢?

java@Overridepublic void updateFill(Pu pu) { // ... if (metaObject.hasSetter(字段名)) { // 字段存在的情况处理 } else { // 字段不存在的情况处理 } // ...}


今早正在开心撸代码的时候,报了一个错。

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 的方法也是这样的问题。

于是我开始从尝试是不是因为mybatis plus 版本太低的原因?

换了版本到 3.3.1.tmp 版本后。一切正常。

在updayeFill过程中,metaObject.hasSetter如何处理实体类中不存在该字段的值?

<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>