mybatis查询出有值的字段为null情况

本文介绍在使用MyBatis进行数据库操作时遇到的关于text类型字段无法正确显示的问题,并提供了解决方案,包括如何正确地查询及更新text类型的字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因是使用了selectByExample()方法,该方法只能查询到字段定义比较小的数值,对与text这种文本字段是没办法展示的。
解决办法:
使用selectByExampleWithBLOBs()即可。

同理,更新数值也是一样的,updateByPrimaryKey() 更新text类型的字段是不生效的,需要使用updateByPrimaryKeyWithBLOBs()

### 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` ,你可以考虑更改对应表结构映射关系里的元数据声明规则或者是采用更加灵活的手动拼接语句形式达成目的 。每种途径都有各自适用场景以及局限之处,请依据实际项目情况做出合理选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值