(随笔)记录MP update()无法置空字段的问题
问题
在code编写的时候有遇到需求,即保存或更新操作之前需要对reason和medication_receipt字段进行清空操作,确保一条数据中这两个字段不能同时有值,由于是Springboot+Mybatpis Plus的框架,因此第一反应是通过mp的update方法进行更新操作。
for (FollowupPapRecordDetail followupPapRecordDetail : details) { if (this.getById(followupPapRecordDetail.getId()) != null) { FollowupPapRecordDetail entity = new FollowupPapRecordDetail(); // 删除字段 entity.setReason(null); entity.setMedicationReceipt(null); // 其他字段... UpdateWrapper<FollowupPapRecordDetail> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", followupPapRecordDetail.getId()); followupPapRecordDetailService.update(entity, updateWrapper); } }
但是执行结果却有问题,对应的reason和medication_receipt字段并没有被更新
原因
在MyBatis-Plus中,如果你将字段的值设置为null
,那么该字段将不会被更新。因此,在更新时,只有那些非null
的字段才会被更新。
解决方法
method 1
- 对于 String 类型的字段,可以将其赋值为空字符串("")来作为修改字段的值。
- 对于 Date、BigDecimal 和 Integer 等非字符串类型的字段,如果将其赋值为 null 或空值(""),它们不会作为修改字段的值。
对于这些非字符串类型的字段,可以通过设置特定的默认值或使用特定方法来实现空值的修改。例如,对于 Date 类型的字段,可以通过设置一个默认的“空日期”(如 1900-01-01)来表示空值。对于 BigDecimal 类型的字段,您可以将其赋值为 BigDecimal.ZERO 来表示空值。
method 2
手动在mapper层构建键sql语句进行调用
本文作者:Joseph·Jonardo
本文链接:https://www.cnblogs.com/Joseph-Jonardo/p/17699816.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步