首页 > 其他分享 >(随笔)记录MP update()无法置空字段的问题

(随笔)记录MP update()无法置空字段的问题

时间:2023-09-13 15:34:54浏览次数:40  
标签:null update 更新 entity 空值 字段 MP 空字

问题

在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

相关文章

  • pyinstaller 报错ImportError: No module named _bootlocale
    生成环境的安装包,执行如下命令会有报错:pyinstaller-wF-pvenv310/Scripts-pvenv310/Lib/site-packages--add-data"./fish.jpg:."--add-data"./kb.ini:."-ifish.ico-nprogram_namemain.py328INFO:PyInstaller:3.6328INFO:Python:3.10.11343INFO:......
  • 两个numpy技巧(模式识别总结)
    1.查找符合特定条件的Numpyndarray对象中元素的数量np.count_nonzero()函数可以用来完成此操作。以下是使用np.count_nonzero()函数快速查找数组中小于5的元素数量的示例:count=np.count_nonzero(array<5)在此示例中,我们使用array<5来获取array中小于5的所有元素,然后......
  • 洛谷 P9503『MGOI』Simple Round I | B. 魔法照相馆 の 题解
    这道题是一道模拟题,坑点不多,但是细节特多,所以导致大部分人\(A\)不了这道题。这道题我也写了注释,如果思路没明白可以看代码和注释的。先创建一个长度为\(3\)的字符串\(s1\),这个字符串的意思就是模拟现在的这几个幕布的情况,这里分了四个字符代表着四种情况,详细如下该字符串......
  • 洛谷 P9502 『MGOI』Simple Round I | A. 魔法数字 の 题解
    直接用pow()函数暴力判断即可,一旦不符合条件就立即跳出循环,要注意开longlong或unsignedlonglong。#include<iostream>#include<cmath>usingnamespacestd;unsignedlonglongn,num;intmain(){cin>>n;for(unsignedlonglongi=2;i<=n;i+=......
  • Python - unix timestamp 时间戳转换错误
    用python的时间转换函数,结果报错。想着这么基础的怎么会报错呢。fromdatetimeimportdatetime#timestampisnumberofsecondssince1970-01-01timestamp=1545730073#convertthetimestamptoadatetimeobjectinthelocaltimezonedt_object=datetime.from......
  • BUG(Spring Framework JdbcTemplate) org.springframework.jdbc.IncorrectResultSetCo
    一.SpringFramework queryForObject问题1.spring4.0之前使用使用jdbctemplate的queryForObject(Stringsql,Object[]args,RowMapper<T>rowMapper)直接放入class类型会报错org.springframework.jdbc.IncorrectResultSetColumnCountException:Incorrectcolumncount:expec......
  • 使用python+ffmpeg+youtube-dl下载youtube上的视频
    使用python+ffmpeg+youtube-dl下载youtube上的视频 一、准备工作1、安装python,详见https://www.cnblogs.com/cnwuchao/p/10562416.html2、安装ffmpeg,详见https://www.cnblogs.com/cnwuchao/p/10562455.html3、安装youtube-dl,详见https://www.cnblogs.com/cnwuchao/p/10562......
  • SpringBoot项目启动报错:An incompatible version [1.1.22] of the Apache Tomcat Nati
    问题解释:“安装了不兼容的ApacheTomcat原生库版本[1.1.22],而Tomcat需要版本[1.2.14]”解决方法:①打开网页 http://archive.apache.org/dist/tomcat/tomcat-connectors/native/②        ③        ④     ......
  • Python使用 - NumPy用法1
    NumPy的核心数据结构之一是ndarray,表示一个多维数组,他存储的是单一数据类型。 导入包importnumpyasnp 1维数组list1=[1,2,3,4,5,6]ndarr1=np.array(list1,dtype=np.float32)print(type(ndarr1),ndarr1)#<class'numpy.ndarray'>[1.2.3.4.5.6.]......
  • Java中Comparable与Comparator的区别
    Java中的Comparable和Comparator都是比较有用的集合排序接口,但是这俩接口使用却有着明显区别,具体使用哪一个接口,今天我们来一起了解下。Comparable接口Comparable是一个排序接口,位于java.lang包下面,实现该接口的类就可以进行自然排序。先看下Comparable接口的定义:pa......