关于Mybatis-plus设置字段为空的正确写法

 更新时间:2023年07月15日 09:02:09   作者:sWX375883  
这篇文章主要介绍了关于Mybatis-plus设置字段为空的正确写法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mybatis-plus设置字段为空的写法

使用Mybatis-plus在进行字段更新操作设置字段值为null,使用如下的操作语句:

LambdaUpdateWrapper<Entity> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(Entity::getField,null);
wrapper.eq(Entity::getId,1);

发现打印出来的sql只有更新条件,没有field=null,导致更新报错。

这是为什么呢?这是因为Mybatis-plus在更新的时候做了null判断,默认不更新为null的传参字段,但业务如此,我们应该怎么写呢?

方法一:调整全局的验证策略

注入配置 GlobalConfiguration 属性 fieldStrategy

方法二:调整字段验证注解

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

@TableField(strategy=FieldStrategy.NOT_EMPTY)

方法三:使用 UpdateWrapper

使用以下方法来进行更新操作:

例1.

    this.mapper.update(null,
                Wrappers.<Entity>lambdaUpdate()
                .set(Entity::getField, null)
                .eq(Entity::getId, id));

例2.

    UpdateWrapper<Entity> updateWrapper = new UpdateWrapper<>();
    updateWrapper.set("field", null);
    updateWrapper.eq("id", 2)
    this.update(updateWrapper);

这样我们就很容易的处理了使用Mybatis-plus设置字段为空不生效的问题了。

MyBatis-Plus更新字段为null 不生效

在使用mybatis-plus时,发现当前端传入的值为null值时,结果无论怎么操作后端都不执行更新null字段的操作,数据库中的需要被更新为null的字段没有被更新。

原因

通过sql查看发现null字段未在sql中执行,经过查阅发现mybaits-plus在更新时排除了null字段

MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进⾏了不是全量更新的策略,默认忽略为null 的字段的

解决办法

1.如果要更新的字段是String类型

可以把前端传入的null改为空字符串(“”),这样mybati-plus就不会忽略更新该字段

2.使用mybatis-plus的字段注入

在可能为空的Model类字段上方加@TableField(fill = FieldFill.INSERT_UPDATE),问题解决。

如:

/**
 * 介绍说明(非必填)
 */
@TableField(fill = FieldFill.UPDATE)
private String explanation;

共有四种可选,默认不处理

3.修改MyBatis-Plus 全局默认策略

缺点:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null

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

4.修改实体类注解,改变字段的忽略判断

缺点:需要注意数据库字段是否设置为 非null ,如果为非null 也更新不成功

@TableField( updateStrategy = FieldStrategy.IGNORED)
private Date settleTime;
( updateStrategy = FieldStrategy.IGNORED)
private Date settleTime;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Springboot自定义异常处理

    详解Springboot自定义异常处理

    本篇文章主要介绍了详解Springboot自定义异常处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java实用技巧:如何使用String去除开头的第一个字符?

    Java实用技巧:如何使用String去除开头的第一个字符?

    这篇文章主要介绍了Java实用技巧:如何使用String去除开头的第一个字符,需要的朋友可以参考下
    2023-11-11
  • Struts2实现文件上传功能

    Struts2实现文件上传功能

    这篇文章主要为大家详细介绍了Struts2实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 拦截器获取request的值之后,Controller拿不到值的解决

    拦截器获取request的值之后,Controller拿不到值的解决

    这篇文章主要介绍了拦截器获取request的值之后,Controller拿不到值的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot 防御 CSRF 攻击的流程及原理解析

    SpringBoot 防御 CSRF 攻击的流程及原理解析

    CSRF是一种非常常见的Web攻击方式,其实是很好防御的,但是由于经常被很多开发者忽略,进而导致很多网站实际上都存在 CSRF 攻击的安全隐患,这篇文章主要介绍了SpringBoot 如何防御 CSRF 攻击,需要的朋友可以参考下
    2023-05-05
  • 一文带你了解Java创建型设计模式之原型模式

    一文带你了解Java创建型设计模式之原型模式

    原型模式其实就是从一个对象在创建另外一个可定制的对象,不需要知道任何创建的细节。本文就来通过示例为大家详细聊聊原型模式,需要的可以参考一下
    2022-09-09
  • 一篇文章带你入门java泛型

    一篇文章带你入门java泛型

    这篇文章主要介绍了java泛型基础知识及通用方法,从以下几个方面介绍一下java的泛型: 基础, 泛型关键字, 泛型方法, 泛型类和接口,感兴趣的可以了解一下
    2021-08-08
  • Java的静态方法Arrays.asList()使用指南

    Java的静态方法Arrays.asList()使用指南

    Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合,这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性,本文将介绍 Arrays.asList() 的语法、应用场景、坑点和总结
    2023-09-09
  • SpringMVC异常处理的三种方式

    SpringMVC异常处理的三种方式

    在SpringMVC中异常处理是一个重要的方面,它帮助我们有效地处理应用程序中的异常情况,提高用户体验和系统的稳定性,这篇文章主要给大家介绍了关于SpringMVC异常处理的三种方式,需要的朋友可以参考下
    2024-02-02
  • mybatis@insert 注解如何判断insert或是update

    mybatis@insert 注解如何判断insert或是update

    这篇文章主要介绍了mybatis@insert 注解如何判断insert或是update,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论