Mybatis下部分字段值无法获取(null)

本博客致力于提供一些开发中常遇到的坑以及解决思路,大家可以多多关注~~~~


今天在使用mybatis-plus做多表间查询的时候,遇到了一个问题,多表查询时,存在部分字段无法获取到值,但是其它字段却没问题。于是本人尝试单独获取各个表的字段值发现都没问题,最后查阅了资料发现是原来我在表中存在带下划线的字段的原因。

解决之前:

数据库字段


pojo


从上面不难看出我pojo中采用了驼峰命名的方式,但是我在mybatis-conf.xml,即mybatis配置文件中却没有开启驼峰命名


解决方法:


开启驼峰命名!!!!



顺带一提,如果你开启了驼峰命名规则,你的pojo中的属性必须全部遵循驼峰命名的规则,特别在多表联查的情况下,不能一部分字段是驼峰,一部分是下划线,这样也会导致部分字段查询不出来!!!!

### MyBatis-Plus 中 `updateById` 方法设置字段NULL 的实现方式 在 MyBatis-Plus 中,默认情况下,`updateById` 方法会将字段更新为 `NULL` 。这是因为其内置策略通常遵循 `not_null` 或者 `default` 模式[^2]。这意味着当实体对象中的某个字段为 `NULL` 时,该字段会被忽略而被写入数据库。 #### 解决方案一:调整字段的填充策略 可以通过修改字段上的注解来改变这一行为。具体来说,在定义实体类属性时,可以使用 `@TableField` 注解并指定 `updateStrategy` 参数为 `ignored`,这样即使字段为 `NULL`,也会将其更新到数据库中: ```java @TableField(updateStrategy = FieldStrategy.IGNORED, value = "guardian_id") private Long guardianId; ``` 上述配置表示无论字段为何(包括 `NULL`),都会尝试对其进行更新操作[^3]。 #### 解决方案二:自定义 SQL 更新逻辑 如果想依赖于框架自动处理机制,则可以直接编写自定义的 UpdateWrapper 来完成更复杂的业务需求。例如下面这段代码展示了如何手动构建条件并将特定列设为空: ```java LambdaUpdateWrapper<YourEntity> wrapper = new LambdaUpdateWrapper<>(); wrapper.set(YourEntity::getGuardianId, null).eq(YourEntity::getId, id); yourMapper.update(null, wrapper); ``` 这里我们创建了一个 lambda 表达式的 update wrapper 对象,并调用了它的 set 方法把目标字段置零同时匹配记录 ID 进行精准定位最后执行更新动作[^1]。 需要注意的是,这种方式绕过了 mybatis-plus 提供的一些便捷功能,因此开发者需自行确保数据一致性等问题得到妥善解决。 #### 总结 为了使 `updateById` 支持将某些字段设置成 `NULL` ,你可以考虑更改对应表结构映射关系里的元数据声明规则或者是采用更加灵活的手动拼接语句形式达成目的 。每种途径都有各自适用场景以及局限之处,请依据实际项目情况做出合理选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值