关于Mybatis-Plus中update()、updateById()方法的使用及null值的判断
使用场景说明:
在 Mybatis-Plus 的使用过程中,经常会遇对数据库更新的情况
更新常用方法:update()、updateById()
问题:经常会遇见对 null 值的处理,对传入的实体参数中的 null 值会有以下需求
- 有的场景需要将实体entity 中的 null 值更新到数据库中对应字段上
- 有的场景需要对值为 null 的字段忽略,只对有值的字段进行更新
而再结合 update 、updateById 就容易混淆两种需求场景的使用。
本文就此问题,详细记录下 结合两种 update 方法,以及两种场景,做详细说明
1、MyBatis-Plus 中的策略介绍
MyBatis-Plus 对字段 null 值的处理是有如下三种策略:
mybatis-plus FieldStrategy:
- IGNORED:0 忽略 (不做值的判断,对所有字段更新,即使是 null 和 空,也会更新字段)
- NOT_NULL:1 非 NULL,默认策略 (对字段值为非 null 的字段做更新)
- NOT_EMPTY:2 非空 (对字段为非空的字段做更新, null 和 空 均不更新)
2、updateById 的使用
默认情况下:
更新策略为 NOT_NULL,当传入的字段值为非null 时,字段更新。也就是说,有值 或者 空会更新, null 不会更新
如何实现将值为 null 的字段,数据库中字段更新为 null
通过修改 mybatis-plus 的全局更新策略实现
修改配置文件#properties文件格式:
mybatis-plus.global-config.db-config.field-strategy=ignored
#yml文件格式:
mybatis-plus:
global-config:
#字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
field-strategy: 0修改为 ignored ,不会对字段做判断,传入什么,数据库中字段就更新为什么
因为是全局修改,容易出现问题,所以 不推荐修改全局策略通过修改字段注解实现
在实体 entity 中,对需要实现 null 可更新数据库的字段添加 @TableField,并修改属性 updateStrategy// 将更新策略修改为 ignore
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Date patchedDate;
3、update 的使用
- update 结合 UpdateWrapper 使用,可以对需要设置为 null 的字段,直接 set
关于Mybatis-Plus中update()、updateById()方法的使用及null值的判断的更多相关文章
- oracle 中的round()函数、null值,rownum
round()函数:四舍五入函数 传回一个数值,该数值按照指定精度进行四舍五入运算的结果. 语法:round(number[,decimals]) Number:待处理的函数 Decimals:精度, ...
- 用mybatis中的insert方法插入数据,返回值为1,但数据库却没有数据
刚才在写东西的时候,用mybatis中的 <insert id="add" parameterType="cn.entity.Computer"> ...
- mybatis Mapper 中resultType使用方法及返回值为Map的写法
mybatis学习(七)——resultType解析 resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等.现总结一下再解释 总结: resul ...
- ConcurrentHashMap中的putIfAbsent方法的使用以及返回值的含义
public V putIfAbsent(@NotNull K key, @NotNull V value) putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候 ...
- freemarker中空值“”,null值的判断
原文:http://zhousheng193.iteye.com/blog/1319772 <#if letVo.manageScore!=""> ${html('${ ...
- jQuery中使用data()方法读取HTML5自定义属性data-*实例
如果你使用jQuery类库,那么你可以非常愉悦的使用jquery的data()方法存取data-* 自定义属性,方法允许我们在DOM元素上绑定任意类型的数据,避免了循环引用的内存泄漏风险 主要的方法如 ...
- C#中往数据库插入/更新时候关于NUll空值的处理
本文转载:http://blog.csdn.net/chybaby/article/details/2338943 本文转载:http://www.cnblogs.com/zfanlong1314/a ...
- Oracle中NULL值与索引
NULL值是关系数据库系统布尔型(true,false,unknown)中比较特殊类型的一种值,通常称为UNKNOWN或空值,即是未知的,不确定的.由于NULL存在着无数的可能,因此NULL值也不等于 ...
- 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction
今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...
- mybatis中的updateByExampleSelective方法怎么使用
mybatis中的updateByExampleSelective方法怎么使用.sendDetailMapper.updateByExampleSelective(sendDetail, m);参数m ...
随机推荐
- ProxySQL(5):线程、线程池、连接池
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9281909.html ProxySQL的线程 ProxySQL由多个模块组成,是一个多线程的daemon类程 ...
- RabbitMQ各个端口被占用的进程说明
官方地址:https://www.rabbitmq.com/networking.html#ports 端口 描述 4369 erlang 发现端口,被 epmd 占用,用于 RabbitMQ 节点和 ...
- 使用sed在源文件上直接替换某一行的内容,只替换第一次找到的那行
sed -i 's/^mysqld_pid_file_path=.*$/mysqld_pid_file_path=\/data\/mysql\/run\/mysqld.pid/' /etc/init. ...
- 为不同的用户生成不同的 Kibana 界面
文件转载自:https://elasticstack.blog.csdn.net/article/details/109593613
- Linux 上安装 PostgreSQL
打开 PostgreSQL 官网 https://www.postgresql.org/,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux.Windows.Ma ...
- 源码学习之MyBatis的底层查询原理
导读 本文通过MyBatis一个低版本的bug(3.4.5之前的版本)入手,分析MyBatis的一次完整的查询流程,从配置文件的解析到一个查询的完整执行过程详细解读MyBatis的一次查询流程,通过本 ...
- AVX图像算法优化系列一: 初步接触AVX。
弄了SSE指令集,必然会在不同的场合不同的人群中了解到还有更为高级的AVX指令集的存在,早些年也确实有偶尔写点AVX的函数,但是一直没有深入的去了解,今年十一期间也没到那里去玩,一个人在家里抽空就折腾 ...
- DVWA File Upload level high 通关
由于level 是 high 1.代码审计 <?php if( isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writi ...
- Dytechlab Cup 2022 (A - C)
Dytechlab Cup 2022 (A - C) A - Ela Sorting Books 分析:贪心,将字符串每一位都存在map里,从前往后尽量让每一个\(n / k\)的段\(mex\)值尽 ...
- 死锁与Lock锁
死锁1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 2.说明: 1)出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞 ...