使用场景说明:


在 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. Elasticsearch:如何把Elasticsearch中的数据导出为CSV格式的文件

    本教程向您展示如何将数据从Elasticsearch导出到CSV文件. 想象一下,您想要在Excel中打开一些Elasticsearch中的数据,并根据这些数据创建数据透视表. 这只是一个用例,其中将 ...

  2. 安装ceph (快速) 步骤三: Ceph 客户端

    大多数 Ceph 用户不会直接往 Ceph 存储集群里存储对象,他们通常会使用 Ceph 块设备. Ceph 文件系统.或 Ceph 对象存储这三大功能中的一个或多个. 前提条件 先完成存储集群快速入 ...

  3. 使用kuboard界面管理k8s集群时使用ConfigMap挂载挂载到pod容器中,映射成一个文件夹

    将 ConfigMap 作为一个数据卷(在挂载时不指定数据卷内子路径,需要指定ConfigMap的子路径)挂载到容器,此时 ConfigMap 将映射成一个文件夹,每一个 KEY 是文件夹下的文件名, ...

  4. 使用国内镜像源安装kubelet kubeadm kubectl

    由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用 yum install -y --nogpgcheck kubelet kubeadm kubectl 安装 Debian / ...

  5. electron 基础

    electron 基础 前文我们快速的用了一下 electron.本篇将进一步介绍其基础知识点,例如:生命周期.主进程和渲染进程通信.contextBridge.预加载(禁用node集成).优雅的显示 ...

  6. 支持 Java 8/11/17/19 的框架,Solon v1.10.5 版本发布

    Java 轻量级应用开发框架.可用来快速开发 Java 应用项目,主框架仅 0.1 MB. 相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) ...

  7. qiankun+vue,为什么我的子应用的子路由老是跳404?这么解决

    主要解决子应用内部跳转路由时,跳到404页的问题 你能搜这个,我姑且认为你基本配置已经好了,而且主跳子的一级路由是正常的,请往下看 忘说了,我的主应用和子应用都是Vue 主应用跳子应用都正常,为什么子 ...

  8. Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog

    前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这 ...

  9. Java编程基础——敬请期待!!!

    变量 数据类型 条件判断 循环 函数 类 Java特性

  10. 齐博x1到底是怎么的存在?

    齐博X1是齐博软件基于thinkphp5开发的内容管理系统,拓展性非常强,后台一键升级,后台提供丰富的频道模块云市插件市场.风格市场.钩子市场,所有都是一键在线安装. 系统已经对接好QQ.微信登录,同 ...