使用场景说明:


在 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值的判断的更多相关文章

  1. oracle 中的round()函数、null值,rownum

    round()函数:四舍五入函数 传回一个数值,该数值按照指定精度进行四舍五入运算的结果. 语法:round(number[,decimals]) Number:待处理的函数 Decimals:精度, ...

  2. 用mybatis中的insert方法插入数据,返回值为1,但数据库却没有数据

    刚才在写东西的时候,用mybatis中的 <insert id="add" parameterType="cn.entity.Computer"> ...

  3. mybatis Mapper 中resultType使用方法及返回值为Map的写法

    mybatis学习(七)——resultType解析 resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等.现总结一下再解释 总结: resul ...

  4. ConcurrentHashMap中的putIfAbsent方法的使用以及返回值的含义

    public V putIfAbsent(@NotNull K key, @NotNull V value) putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候 ...

  5. freemarker中空值“”,null值的判断

    原文:http://zhousheng193.iteye.com/blog/1319772 <#if letVo.manageScore!=""> ${html('${ ...

  6. jQuery中使用data()方法读取HTML5自定义属性data-*实例

    如果你使用jQuery类库,那么你可以非常愉悦的使用jquery的data()方法存取data-* 自定义属性,方法允许我们在DOM元素上绑定任意类型的数据,避免了循环引用的内存泄漏风险 主要的方法如 ...

  7. C#中往数据库插入/更新时候关于NUll空值的处理

    本文转载:http://blog.csdn.net/chybaby/article/details/2338943 本文转载:http://www.cnblogs.com/zfanlong1314/a ...

  8. Oracle中NULL值与索引

    NULL值是关系数据库系统布尔型(true,false,unknown)中比较特殊类型的一种值,通常称为UNKNOWN或空值,即是未知的,不确定的.由于NULL存在着无数的可能,因此NULL值也不等于 ...

  9. 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction

    今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...

  10. mybatis中的updateByExampleSelective方法怎么使用

    mybatis中的updateByExampleSelective方法怎么使用.sendDetailMapper.updateByExampleSelective(sendDetail, m);参数m ...

随机推荐

  1. vivo 公司 Kubernetes 集群 Ingress 网关实践

    文章转载自:https://mp.weixin.qq.com/s/qPqrJ3un1peeWgG9xO2m-Q 背景 vivo 人工智能计算平台小组从 2018 年底开始建设 AI 计算平台至今,已经 ...

  2. core-js/modules/es.error.cause.js 报错

    解决方法: 1.先删除 node_modules 依赖 npm rm -rf node_modules 2.首先安装 报错的插件 npm install --save core-js 3.最后再 np ...

  3. 秋初 WAMP 集成环境 v2.1

    基于QT的PHP集成开发环境v2.1 https://gitee.com/xiaqiuchu/wamp-integrated-environment 界面预览 已实现功能 服务的启动.关闭.重启. p ...

  4. EasyExcel实现文件导出

    官网:https://www.yuque.com/easyexcel/doc/easyexcel 导出 准备工作 引入依赖 <!--EasyExcel相关依赖--> <depende ...

  5. NSIS 检测默认浏览器

    #检测默认浏览器 #编写:水晶石 #原理:用FindExecutable函数查找htm关联程序路径与名称,然后分析字串中包含的可执行文件名. !include "LogicLib.nsh&q ...

  6. 分布式存储系统之Ceph集群RBD基础使用

    前文我们了解了Ceph集群cephx认证和授权相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16748149.html:今天我们来聊一聊ceph集群的 ...

  7. ASP.NET Core :中间件系列(三):中间件限流

    中间件 微软官网定义: 中间件 中间件意思就是处理请求和响应的软件: 1.选择是否将请求传递到管道中的下一个组件. 2.可在管道中的下一个组件前后执行工作. 对中间件类 必须 包括以下 具有类型为 R ...

  8. C++ 使用栈求解中缀、后缀表达式的值

    1. 前言 表达式求值对于有知识积累的你而言,可以通过认知,按运算符的优先级进行先后运算. 但对计算机而言,表达式仅是一串普通的信息而已,需要通过编码的方式告诉计算机运算法则,这个过程中栈起到了至关重 ...

  9. Vue学习之--------Vue生命周期beforeCreate、created、beforeMount、mounted、beforeDestroy 。。。(图解详细过程)(2022/7/17)

    文章目录 1.Vue生命周期 1.1 概念 1.2 图解 2.钩子函数的用法说明 2.1 beforeCreate()和created()的详细讲述 2.1.1 方法说明 2.1.2 代码实例 2.1 ...

  10. UBOOT编译--- make xxx_deconfig过程详解(一)

    make xxx_deconfig过程详解 1. 前言 2. 概述 3. build变量的定义 4. 目标%config的定义 4.1 依赖 scripts_basic 4.1.1 语句$(if $ ...