MybatisPlus 不修改全局策略和字段注解如何将字段更新为null

mybatis-plus 以下简称mp,目前应该也算是主流的一款数据访问层应用框架。源于其对mybatis 的近乎完美的封装,让我们在使用的时候无比的顺滑, 几乎提供了所有单表操作的方法,大大提升了效率。并且这款框架还是国产的哦,没了解过的可以去了解一下。

回归正题,我们这次来讲一下,怎么样通过mp将数据库中的一个字段更新为null. 可能很多人会觉得奇怪,更新为null, 直接set field = null 不就可以了。这里大家要注意一下,一般情况,我们在使用mp的时候,他的默认策略是空不更新, 这个也是非常主流和常见的一种设置。 为什么这么说呢, 比如我们将一个user表中的  del_flag 设置为1,  一般情况我们只需这么做就行:

User user = new User();

user.setId(1);

user.setDelFlag(1);

userService.update(user);

这个时候,其实其他的字段都是空,如果他的策略是空更新,那么执行之后,表里就只有id 和del_flag有值,其余的字段都是Null,很明显这不是我们想要的结果,这就是默认的空不更新策略。

这个时候就出现了一个痛点,必须我是需要把表中的某个字段更新为空,那应该怎么做的?

一是我们将全局更新策略设置为空可以更新

二是将这个字段设置为空可以更新。

这两种方式都是我极力不推荐的,大家也尽量不要使用这两种方法,真的非常危险,有可能导致别人在调用更新方法的时候不小心就把你的某些字段置为null 了。

这里推荐一种方法,也是官网给出的,但是必须要求mp的版本 大于3, 如果是3以下的版本没有这个功能,就是使用UpdateWrapper.

比如,我们想把  user表中的gender设置为空:

LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
 
wrapper.set(User::getGender(), null);
 
wrapper.eq(User::getId(), 1);
 
userService.update(wrapper);
通过UpdateWrapper 可以设置null.

官网说明:

地址: https://mp.baomidou.com/guide/faq.html#%E6%8F%92%E5%85%A5%E6%88%96%E6%9B%B4%E6%96%B0%E7%9A%84%E5%AD%97%E6%AE%B5%E6%9C%89-%E7%A9%BA%E5%AD%97%E7%AC%A6%E4%B8%B2-%E6%88%96%E8%80%85-null

到此这篇关于MybatisPlus 不修改全局策略和字段注解如何将字段更新为null的文章就介绍到这了,更多相关MybatisPlus将字段更新为null内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 3分钟纯 Java 注解搭个管理系统的示例代码

    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页面,有时候觉得自己好像天生不适合干前端,你要是让我研究研究后端的技术,看个中间件源码啊,分析分析什么框架底层原理啊,这都问题不大,偶尔搞一下JS也可以.你要是让我写个css样式,那简直要命了,一点也提不起兴趣,不知道有没有跟我一样的. 今天要介绍的框架直接不用写页面了,话不多说,下边咱们直奔主题 Erupt一个通用后

  • 如何使用Android注解处理器

    我们就可以结合今天的Annotation Processing Tool(APT)来自定义注解处理器. 注解处理器简单解释就是收集我们标记的注解,处理注解上提供的信息. 本篇用我之前写的Saber举例说明. 1.定义注解 推荐New -> Module -> Java Library,新建一个Java Library Module,命名为xx-annotation.用来单独存放注解. 既然是注解处理器,那么首先需要有注解.自定义一个注解使用@interface关键字. public @inte

  • Java注解处理器简单实例

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.JavaSE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器. 注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口.除此之外,Java在java.lang.reflect包下新增了AnnotatedElement

  • Java注解处理器学习之编译时处理的注解详析

    1. 一些基本概念 在开始之前,我们需要声明一件重要的事情是:我们不是在讨论在运行时通过反射机制运行处理的注解,而是在讨论在编译时处理的注解. 编译时注解跟运行时注解到底区别在什么地方?其实说大也不大,主要是考虑到性能上面的问题.运行时注解主要是完全依赖于反射,反射的效率比原生的慢,所以在内存比较少,CPU比较烂的机器上会有一些卡顿现象出现.而编译时注解完全不会有这个问题,因为它在我们编译过程(java->class)中,通过一些注解标示,去动态生成一些类或者文件,所以跟我们的APK运行完全没有

  • 解决golang gin框架跨域及注解的问题

    在golang的路上缓慢前进 Gin框架 跨域问题的解说与方法 代码如下: package main import ( "github.com/gin-gonic/gin" "awesomeProject/app/app_routers" "strings" "fmt" "net/http" ) /* 路由初始化*/ var ( engine = gin.Default() ) func main() {

  • Java 自定义注解的魅力

    注解是什么? ①.引用自维基百科的内容: Java注解又称Java标注,是JDK5.0版本开始支持加入源代码的特殊语法 元数据 . Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标注内容.在编译器生成类文件时,标注可以被嵌入到字节码中.Java虚拟机可以保留标注内容,在运行时可以获取到标注内容. 当然它也支持自定义Java标注. ②.引用自网络的内容: Java 注解是在 JDK5 时引入的新特性,注解(也被称为 元数据 )为我们在代码

  • Android kotlin使用注解实现防按钮连点功能的示例

    SingleClick: @Retention(AnnotationRetention.RUNTIME) @Target(AnnotationTarget.FUNCTION) annotation class SingleClick( // 点击间隔时间,毫秒 val value: Long = 500 ) SingleClickAspect: import android.os.SystemClock import org.aspectj.lang.ProceedingJoinPoint im

  • MybatisPlus 不修改全局策略和字段注解如何将字段更新为null

    mybatis-plus 以下简称mp,目前应该也算是主流的一款数据访问层应用框架.源于其对mybatis 的近乎完美的封装,让我们在使用的时候无比的顺滑, 几乎提供了所有单表操作的方法,大大提升了效率.并且这款框架还是国产的哦,没了解过的可以去了解一下. 回归正题,我们这次来讲一下,怎么样通过mp将数据库中的一个字段更新为null. 可能很多人会觉得奇怪,更新为null, 直接set field = null 不就可以了.这里大家要注意一下,一般情况,我们在使用mp的时候,他的默认策略是空不更

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

    目录 问题背景 问题原因 解决方案 问题背景 昨晚同事找我帮他看一个问题,他使用mybatis-plus中提供的updateById方法,想将查询结果中某个字段原本不为null的值更新为null(数据库设计允许为null),但结果该字段更新失败,执行更新方法后还是查询的结果. 问题原因 mybatis-plus FieldStrategy 有三种策略: IGNORED:0 忽略 NOT_NULL:1 非 NULL,默认策略 NOT_EMPTY:2 非空 而默认更新策略是NOT_NULL:非 NU

  • mybatis-plus 新增/修改如何实现自动填充指定字段

    目录 mybatis-plus 新增/修改 自动填充指定字段 1.需要修改的字段在模型类上添加 2.新建一个MetaObjectHandler的实现类 通用字段自动填充的最佳实践总结 一.调整数据库表结构 二.通用维护信息父类-自动赋值的字段 三.实体类的实现 四.自动赋值的规则 五.实现效果 mybatis-plus 新增/修改 自动填充指定字段 1.需要修改的字段在模型类上添加 @TableField(fill = FieldFill.xxx) 注解. FieldFill的选项: 哪个字段在

  • mybatis-plus主键生成策略

    MP 支持多种主键策略 默认是推特的"" 雪花算法"" ,也可以设置其他策略下面我演示主键策略使用 MP的主键定义在一个一个枚举类中 源码如下 public enum IdType { AUTO(0),//数据库自增 依赖数据库 NONE(1),// 表示该类型未甚至主键类型 (如果没有主键策略)默认根据雪花算法生成 INPUT(2),//用户输入ID(该类型可以通过自己注册填充插件进行填充) //下面这三种类型,只有当插入对象id为空时 才会自动填充. ID_WO

  • Mybatis-Plus中update()和updateById()将字段更新为null

    目录 简介 问题描述 原因 概述 源码分析 所有策略 设置为null的方案 方案1:使用UpdateWrapper更新 方案2:设置全局的field-strategy(不推荐) 方案3:设置某个字段的field-strategy 参考文章 简介 说明 本文介绍Mybatis-Plus无法将字段更新为null的原因及解决方法. 问题描述 用Mybatis-Plus的update()或者updateById()来更新数据时,无法将字段设置为null值(更新后数据还是原来的值). 原因 概述 默认情况

  • Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑

    某天检查一位离职同事写的代码,发现其对应表虽然设置了AUTO_INCREMENT自增,但页面新增功能生成的数据主键id很诡异,长度达到了19位,且不是从1开始递增的-- 我检查了一下,发现该表目前自增主键已经变成从1468844351843872770开始递增了-- 这就很奇怪了,目前该表数据量很少,且主键是设置AUTO_INCREMENT,正常而言,应该自增id仍在1000范围内,但目前已经变成一串长数字. 底层ORM框架用的是Mybatis-Plus,我寻思了一下,这看起来像是在插入数据库就

  • Mybatis-Plus主键生成策略的方法

    目录 前言 一.官网 二.主键注解@TableId说明 1.源码 2.作用 3.使用 三.主键生成策略-IdType枚举说明 1.源码 2.说明 3.全局设置 三.ID生成器介绍 1.IdentifierGenerator 2.IKeyGenerator 四.自定义主键生成器 总结 前言 很多人在使用Mybatis-Plus的时候可能会疑惑,自己明明没有配置主键的生成策略,但是执行新增操作时却自动生成了主键,而且还特别长.这是由于Mybatis-Plus默认就会采用雪花算法填充主键字段. 今天就

  • 详解mybatis-plus实体类中字段和数据库中字段名不对应解决办法

    在使用mybatis或者mybatis-plus时候,有些时候会出现数据库的字段名和实体类的字段名不一致的情况,如果运行那么这个字段就会无法进行自动映射而报错.这里就以我的数据库name字段名和这里的实体类的u_name字段名为例. 解决办法有以下三种 方法一: 将数据库中的字段和实体类中的字段名修改成一样的名字 方法二: 如果是自定以mapper.xml文件中手写的sql查询语句,可以给字段起一个别名例如这里就可以写成select name as u_name from- 方法三: 使用注解@

  • 如何通过一个注解实现MyBatis字段加解密

    目录 简介 模块 使用方法 配置项说明 开源链接 总结 简介 mybatis-crypto 是一个基于 mybatis 插件机制实现的字段加解密组件,通过一个注解即可对敏感数据进行加解密处理. 支持自定义 Encryptor.特殊字段单独指定 Encryptor 和 key ,满足大部分使用场景. 模块 mybatis-crypto 包括三个模块: mybatis-crypto-core 插件的核心功能模块 mybatis-crypto-spring-boot-starter 提供了 Sprin

  • Mybatis-plus如何查询表中指定字段(不查询全部字段)

    目录 查询表中指定字段(不查询全部字段) 场景 解决 只查询部分字段的两种方法 方法1 方法2 查询表中指定字段(不查询全部字段) 场景 Mybatis-Plus中BaseMapper提供的方法默认查询的是数据库中表的所有字段,但是有时候,我们仅仅需要查询的是表的某个字段货主一些字段,查询全部的话数据量大时会出现效率问题,况且对于有强迫症的人简直是难以忍受!!! 解决 Mybatis-Plus中通过构建QueryWrapper来设置select方法指定需要查询的字段. 具体图片 只查询部分字段的

随机推荐