问题
在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语句进行调用
标签:null,update,更新,entity,空值,字段,MP,空字 From: https://www.cnblogs.com/Joseph-Jonardo/p/17699816.html