Mybatis-Plus使用updateById()、update()将字段更新为null

news2024/9/28 17:27:21

文章目录

  • 一、问题背景
  • 二、问题原因
  • 三、解决方案
    • 1. 设置全局的field-strategy
    • 2. 对某个字段设置单独的field-strategy
    • 3. 使用UpdateWrapper方式更新(推荐使用)

本文主要介绍了Mybatis-Plus使用updateById()、update()将字段更新为null,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、问题背景

使用mybatis-plus时想将查询结果中某个字段值更新为null,由于之前存入了非null数据,如下一个duty_json字段,想做对象的更新操作(数据库设计允许为null),但结果该字段更新失败,执行更新方法后还是查询的结果。
在这里插入图片描述

二、问题原因

mybatis-plus FieldStrategy 有三种策略:

  • IGNORED:0 忽略
  • NOT_NULL:1 非 NULL,默认策略
  • NOT_EMPTY:2 非空

默认更新策略是NOT_NULL:非 NULL;即通过接口更新数据时数据为NULL值时将不更新进数据库。

三、解决方案

1. 设置全局的field-strategy

properties文件格式:

mybatis-plus.global-config.db-config.field-strategy=ignored

yml文件格式:

mybatis-plus:
  global-config:
      #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
    field-strategy: 0

这样做是全局性配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。

2. 对某个字段设置单独的field-strategy

根据具体情况,在需要更新的字段中调整验证注解,如验证非空:

@TableField(strategy=FieldStrategy.NOT_EMPTY)

这样的话,我们只需要在需要更新为null的字段上,设置忽略策略,如下:


@TableField(strategy = FieldStrategy.IGNORED)
private String dutyJson;

在更新代码中,我们直接使用mybatis-plus中的updateById方法便可以更新成功,如下:

/**
 * updateById更新字段为null
 * @param id
 * @return
 */
@Override
public boolean updateProductById(Integer id) {
    InsuranceProduct insuranceProduct = Optional.ofNullable(articleMapper.selectById(id)).orElseThrow(RuntimeException::new);
    insuranceProduct.setDutyJson(null);
    insuranceProductMapper.updateById(insuranceProduct);
}

使用上述方法,如果需要这样处理的字段较多,那么就需要涉及对各个字段上都添加该注解,显得有些麻烦了。那么,可以考虑使用第三种方法,不需要在字段上加注解也能更新成功。

3. 使用UpdateWrapper方式更新(推荐使用)

在mybatis-plus中,除了updateById方法,还提供了一个update方法,直接使用update方法也可以将字段设置为null,代码如下:

/**
* 根据商品唯一编码,更新商品责任的dutyjson
*/
  public int updateProduct(String productCode) {
	    InsuranceProduct old = lambdaQuery().eq(InsuranceProduct::getProductCode, productCode).one();
        UpdateWrapper<InsuranceProduct> wrapper = new UpdateWrapper<>();
        wrapper.lambda().eq(InsuranceProduct::getProductCode, productCode)
                .set(InsuranceProduct::getDutyJson, null)
                .eq(InsuranceProduct::getDeleted, 0);
        return getBaseMapper().update(old, wrapper);
    }

这种方式不影响其他方法,不需要修改全局配置,也不需要在字段上单独加注解,所以推荐使用该方式。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/853286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个好的人力资源管理系统包括哪些部分

阅读本文&#xff0c;您将具体详细了解&#xff1a;一个好的人力资源管理系统应该包括哪些部分。 人事部门是一家公司重要的职能部门之一&#xff0c;为公司的持续性、健康性发展提供人力保障。 然而&#xff0c;目前传统的人事管理方式在应对一些问题时存在着一些挑战。 例…

谈谈什么是云计算?以及它的应用

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 ​编辑 一、什么是云计算 二、云计算的优势与劣势&#xff1f; 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…

RESTful互联网软件架构

文章目录 前言项目案例添加数据 PostMapping删除数据 DeleteMapping修改数据 PutMapping查询所有数据 GetMapping按照ID查询数据 GetMapping("/{xxx}")复杂多条件查询 PostMapping("/xxx") 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#x…

把握客户之心:专业供应商如何妥善应对不合理的项目要求

理解不合理要求的来源 在项目管理中&#xff0c;面对客户的不合理要求是一项经常遇到的挑战。但在对这些要求作出反应之前&#xff0c;我们首先需要深入了解它们的来源。 客户的业务环境与压力 对于许多客户来说&#xff0c;他们在提出项目需求时可能面临来自上级、同事或业…

无线液位传感器—简介

近年来&#xff0c;随着无线传感网络技术的愈发成熟和稳定&#xff0c;无线传感器因其安装、维护方便&#xff0c;不用布线、节约成本&#xff0c;监测方便&#xff0c;使用灵活&#xff0c;可适用于多种工业领域等优点&#xff0c;正在逐步替代部分传统有线传感器&#xff0c;…

JAVA电商平台免费搭建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

纯跟踪(Pure Pursuit)路径跟踪算法研究(2)

纯跟踪(Pure Pursuit)路径跟踪算法研究&#xff08;2&#xff09; 下午进行了简单的公式推导&#xff0c;理论推导部分是没有问题的 下面的博客提供了在实车上用 GPS 实现纯跟踪控制的一些思路和注意点 Pure Pursuit&#xff08;纯追踪算法&#xff09;ROS实践 并不急于在实车…

勘探开发人工智能技术:机器学习(1)

0 提纲 2.1 什么是机器学习 2.2 不确定性 2.3 数据类型 2.4 分类、回归、聚类 2.5 分类问题的训练与测试 2.6 性能评价指标 1 什么是机器学习 对于西瓜这个抽象类来说&#xff0c;它具有“色泽”&#xff0c;“根蒂”&#xff0c;“敲声”三个属性&#xff1a; 通过观察这个…

值得尝试的进销存软件,新手使用也轻松!

作为一名小老板&#xff0c;我曾经非常担心在操作进销存软件时出现故障&#xff0c;因为这会直接影响到我们的业务开展。然而&#xff0c;在操作管家婆云辉煌的过程中&#xff0c;我发现这种担忧是没有必要的。 管家婆云辉煌的稳定性非常高&#xff0c;几乎不会出现软件故障。 …

软件测试目的和原则

一、软件测试的目的 1&#xff09;软件测试是为了发现错误而执行程序的过程。 2&#xff09;测试是为了证明程序有错&#xff0c;而不是证明程序无错。&#xff08;发现错误不是唯一目的&#xff09; 3&#xff09;一个好的测试用例在于它发现至今未发现的错误。 4&#xf…

uni-app微信小程序开发自定义select下拉多选内容篇

分享-2023年高级前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点总结站点 *分享一个使用比较久的&#x1fa9c; 技术框架公司的选型&#xff1a;uni-app uni-ui vue3 vite4 ts 需求分析&#xff1a;微信小程序-uni-ui内容 1、创建一个自定义的下拉&#xff0c;支持多…

浏览器多管闲事之跨域

年少时的梦想就是买一台小霸王游戏机 当时的宣传语就是小霸王其乐无穷~。 大些了&#xff0c;攒够了零花钱&#xff0c;在家长的带领下终于买到了 那一刻我感觉就是最幸福的人 风都是甜的&#xff01; 哪成想... 刚到家就被家长扣下了 “”禁止未成年人玩游戏机 (问过卖家了&a…

AWS中Lambda集成SNS

1.创建Lambda 在Lambda中&#xff0c;创建名为AWSSNSDemo的函数 use strict console.log(loading function); var aws require(aws-sdk); var docClient new aws.DynamoDB.DocumentClient(); aws.config.regionap-southeast-1;exports.handler function(event,context,cal…

C语言实现选择排序

什么是选择排序&#xff1f; 选择排序是一种简单直观的排序算法&#xff0c;它的核心思想是每次从未排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放到已排序序列的末尾。通过重复这个过程&#xff0c;直到所有元素都排好序为止。 选择排序…

IntelliJ IDEA如何重新弹出git身份验证窗口

1、点击File菜单—>点击Settings—>点击Appearance & Behavior—>点击System Settings—>点击Passwords—>选中Do not save, forget passwords after restart—>点击Apply—>点击OK&#xff0c;如下所示&#xff1a; 2、重启IntelliJ IDEA—>通过g…

idea集成svn

一、注意 安装svn客户端的时候一定要勾选&#xff0c;否则在idea上集成svn的时候会找不到 svn.exe 而报错。 如果当初安装时忘记勾选&#xff0c;重新运行安装包&#xff0c;选择modify&#xff0c;勾选command line client tools项中的内容。 二、配置idea集成svn 三、检出(c…

生产车间SOP+电子作业指导书系统解决方案

为了提高生产效率&#xff0c;许多企业开始使用SOP电子作业指导书系统来统一管理和快速发布工作指导书。这种系统不仅能够实现无纸化办公&#xff0c;节省企业资源&#xff0c;还能集成生产管理看板系统和安灯呼叫系统&#xff0c;实现生产现场数据的目视化管理。 一、SOP系统拓…

简单数据类型

目录 前言 一.变量 1.1 变量命名 2.1 变量定义 二.类型 2.1 字符串 2.1.1 定义 2.1.2 操作 2.1.3 python2中的print语句 2.2 整数 2.2.1 运算 2.2.2 浮点数 2.2.3 str()函数 2.3 列表 2.3.1 访问和使用列表元素 2.3.2 在列表中添加元素 2.3.3 从列表中删除元素 2.3.4 组织列表…

LangChain源码逐行解密之LLMs(二)

LangChain源码逐行解密之LLMs(二) 18.3 base.py源码逐行剖析 现在我们要聚焦于源代码中的大语言模型部分。如图18-3所示,LangChain提供了许多语言模型的选择。 Gavin大咖微信:NLP_Matrix_Space 图18- 3 LangChain的llms目录 如图18-4所示,整个LangChain的模块化设计非常出…

最小花费 c++详解

最小花费 c详解 最小花费题目描述输入格式输出格式样例样例输入样例输出 提示 解法代码 最小花费 题目描述 在 n n n 个人中&#xff0c;某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费&…