关于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;

总结

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

相关文章

  • 浅谈java Properties类的使用基础

    浅谈java Properties类的使用基础

    下面小编就为大家分享一篇浅谈java Properties类的使用基础,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • EasyExcel自定义导出列和顺序实例代码

    EasyExcel自定义导出列和顺序实例代码

    这篇文章主要给大家介绍了关于EasyExcel自定义导出列和顺序的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 解决springboot的findOne方法没有合适的参数使用问题

    解决springboot的findOne方法没有合适的参数使用问题

    这篇文章主要介绍了解决springboot的findOne方法没有合适的参数使用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 基于@RequestParam name和value属性的区别

    基于@RequestParam name和value属性的区别

    这篇文章主要介绍了@RequestParam name和value属性的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java字符串格式化工具String.format()完整用法指南

    Java字符串格式化工具String.format()完整用法指南

    String.format是Java中的一个静态方法,用于创建格式化的字符串,这篇文章主要介绍了Java字符串格式化工具String.format()完整用法指南的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-01-01
  • Java结构型设计模式之组合模式详解

    Java结构型设计模式之组合模式详解

    组合模式,又叫部分整体模式,它创建了对象组的数据结构组合模式使得用户对单个对象和组合对象的访问具有一致性。本文将通过示例为大家详细介绍一下组合模式,需要的可以参考一下
    2022-09-09
  • SpringBoot集成Beetl后统一处理页面异常的方法

    SpringBoot集成Beetl后统一处理页面异常的方法

    这篇文章主要介绍了SpringBoot集成Beetl后统一处理页面异常的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Fluent Mybatis快速入门详细教程

    Fluent Mybatis快速入门详细教程

    由于FluentMybatis是基于mybatis上做封装和扩展的,所以这里主要聊聊mybatis处理的方式,以及给出FluentMybatis的解放方案。对Fluent Mybatis入门相关知识感兴趣的朋友一起看看吧
    2021-08-08
  • Java设计模式--代理模式

    Java设计模式--代理模式

    代理就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用
    2021-07-07
  • Java中的序列化和反序列化使用及解读

    Java中的序列化和反序列化使用及解读

    文章总结了Java中序列化和反序列化的概念,包括序列化的用途、实现方式和注意事项,此外,还介绍了其他几种常见的序列化框架,如JSON序列化、ProtocolBuffers和Kryo,并给出了最佳实践和使用场景建议
    2026-02-02

最新评论