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

总结

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

相关文章

  • 解决MyEclipse出现the user operation is waiting的问题

    解决MyEclipse出现the user operation is waiting的问题

    今天做项目的时候每次修改代码保存后都会跳出一个框框,然后就有两个进度条,上面写the user operation is wating...小编去网上查了查解决了这个问题,下面跟大家分享一下。
    2018-04-04
  • Java中的BufferedInputStream与BufferedOutputStream使用示例

    Java中的BufferedInputStream与BufferedOutputStream使用示例

    BufferedInputStream和BufferedOutputStream分别继承于FilterInputStream和FilterOutputStream,代表着缓冲区的输入输出,这里我们就来看一下Java中的BufferedInputStream与BufferedOutputStream使用示例:
    2016-06-06
  • springboot集成redis之字典缓存详解

    springboot集成redis之字典缓存详解

    Redis的字典缓存是支撑其高性能的一个关键因素,它使得Redis能够以极快的速度处理大量的数据,这篇文章主要介绍了springboot集成redis之字典缓存,需要的朋友可以参考下
    2024-07-07
  • Java实现打字游戏

    Java实现打字游戏

    这篇文章主要为大家详细介绍了Java实现打字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • SpringCloud启动失败问题汇总

    SpringCloud启动失败问题汇总

    这篇文章主要介绍了SpringCloud启动失败问题汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java实现优雅停止线程的有效方法详解

    Java实现优雅停止线程的有效方法详解

    这篇文章主要为大家详细如何安全有效停止 Java 线程的,确保多线程应用程序平稳运行并实现最佳资源管理,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • IDEA + Maven环境下的SSM框架整合及搭建过程

    IDEA + Maven环境下的SSM框架整合及搭建过程

    这篇文章主要介绍了IDEA + Maven环境下的SSM框架整合及搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • ruoyi微服务版本搭建运行方式

    ruoyi微服务版本搭建运行方式

    这篇文章主要介绍了ruoyi微服务版本搭建运行方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 基于SpringBoot中activeMq的JmsTemplate的实例

    基于SpringBoot中activeMq的JmsTemplate的实例

    这篇文章主要介绍了基于SpringBoot中activeMq的JmsTemplate的实例问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • springboot中使用自定义两级缓存的方法

    springboot中使用自定义两级缓存的方法

    这篇文章主要介绍了springboot中使用自定义两级缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论