Mybatis-Plus的saveOrUpdateBatch(null)问题及解决

 更新时间:2023年07月14日 16:09:15   作者:长安有故里y  
这篇文章主要介绍了Mybatis-Plus的saveOrUpdateBatch(null)问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mybatis-Plus的saveOrUpdateBatch(null)问题

Mybatis-Plus的saveOrUpdateBatch对象属性为空(null)不更新的问题

saveOrUpdateBatch对象属性为空(null)不更新的问题

在属性上假如注解即可updateStrategy = FieldStrategy.IGNORED

就是为null的时候也更新字段值

  @ApiModelProperty(value = "固定电话")
    @TableField(value = "FIXED_TELEPHONE",updateStrategy = FieldStrategy.IGNORED)
    private String fixedTelephone;

mybatis-plus的saveOrUpdate问题

项目场景

在使用mybatis-plus的时候传入的数据id不为空的时候

问题描述

出现问题是一直是新增而不是修改

service.savaOrUpdate(User user);

这里的User是实体类

含有属性   id 主键、name 姓名

原因分析

这里我先说明一下saveOrUpdate()的底层原理是:

先进行查询 如果这个id为空 -----就新增

如果有id的话就会通过这个id先进行查询 如果查到数据就进行修改,如果没有查到数据就进行新增

现在让我们看一下它的源码:

 public boolean saveOrUpdate(T entity) {
        if (null == entity) {
            return false;
        } else {
            TableInfo tableInfo = TableInfoHelper.getTableInfo(this.entityClass);
            Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!", new Object[0]);
            String keyProperty = tableInfo.getKeyProperty();
            Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!", new Object[0]);
            Object idVal = tableInfo.getPropertyValue(entity, tableInfo.getKeyProperty());
            return !StringUtils.checkValNull(idVal) && !Objects.isNull(this.getById((Serializable)idVal)) ? this.updateById(entity) : this.save(entity);
        }
    }

核心代码是最后的一句

!StringUtils.checkValNull(idVal) && !Objects.isNull(this.getById((Serializable)idVal)) ? this.updateById(entity) : this.save(entity);
  • 首先第一个
!StringUtils.checkValNull(idVal)

这一句是idVal是id值

checkValNull 点进去 

 

这句代表的是id是否为空  如果为空的话就 最后结果就是真 (因为有!)

  • 第二个
!Objects.isNull(this.getById((Serializable)idVal))

this.getById((Serializable)idVal)这个方法是

是通过id进行查询是否有id的这个数据  如果有的话就就是真 

这样两个条件都成立 ---也就是id不为空,id这个数据存在的话 ---就进行修改

否则就是新增

这就是saveOrUpdate的底层原理

 敲黑板  我出现的问题

这个方法的selectById()

我的情况是我在mapper中自己写了一个方法名字跟这个一样。

因为mapper是继承了BaseMapper这个类,调用的时候子类有方法就调用了子类的方法

因此我的情况是变成了有id也变成了新增

最后总结 !!!非常重要的是 我们自己mapper中定义的方法一定不要跟mybatisplus的中方法名一样,防止出现这种错误

这也是我代码规范没有写好,大家写的时候一定要按照阿里的开发规约进行开发,取名要正规 

最后

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

相关文章

  • Java基于IDEA实现qq邮件发送小程序

    Java基于IDEA实现qq邮件发送小程序

    这篇文章主要介绍了Java基于IDEA实现qq邮件发送小程序功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 在Java中使用Redis实现缓存优化的操作步骤

    在Java中使用Redis实现缓存优化的操作步骤

    在现代高并发的应用中,数据库访问的性能往往成为瓶颈,为了提高性能,我们通常会使用缓存机制,Redis 是一种开源的内存数据存储系统,广泛应用于缓存系统的构建中,本文将深入探讨如何在Java中使用Redis实现缓存优化,需要的朋友可以参考下
    2025-07-07
  • Spring Task实现定时任务的示例

    Spring Task实现定时任务的示例

    定时任务的是按照指定的时间或时间间隔,自动执行的任务, 在应用程序中通常用于自动化处理一些定期或周期性的操作,特别是与时间相关的任务,本文就来详细的介绍一下Spring Task实现定时任务的示例,感兴趣的可以了解一下
    2026-04-04
  • 解决mybatis-generator生成Mapper文件没有Selective结尾的问题

    解决mybatis-generator生成Mapper文件没有Selective结尾的问题

    这篇文章主要介绍了解决mybatis-generator生成Mapper文件没有Selective结尾的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java Reactor反应器模式使用方法详解

    Java Reactor反应器模式使用方法详解

    这篇文章主要介绍了Java Reactor反应器模式使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java判断字符串是否有逗号的方法

    java判断字符串是否有逗号的方法

    下面小编就为大家带来一篇java判断字符串是否有逗号的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • java中抽象类和接口的相同和不同点介绍

    java中抽象类和接口的相同和不同点介绍

    大家好,本篇文章主要讲的是java中抽象类和接口的相同和不同点介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Kotlin flow实践

    Kotlin flow实践

    Kotlin Flow是基于协程的流式数据处理API,支持异步、中断和无限数据流,冷流按需启动,操作符分中间、终止、构建器,优化方案如buffer()实现并行处理,collectLatest()专注最新数据,提升性能与实时性,本文给大家介绍Kotlin flow的相关知识,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • Java中Set集合转为List集合常见的两种方式

    Java中Set集合转为List集合常见的两种方式

    List是Java中比较常用的集合类,指一系列存储数据的接口和类,可以解决复杂的数据存储问题,这篇文章主要给大家介绍了关于Java中Set集合转为List集合常见的两种方式,需要的朋友可以参考下
    2023-12-12
  • Java中的Semaphore源码分析

    Java中的Semaphore源码分析

    这篇文章主要介绍了Java中的Semaphore源码分析,Semaphore是一个访问公共资源的线程数量如限流、停车等,它是一个基于AQS实现的共享锁,主要是通过控制state变量来实现,需要的朋友可以参考下
    2023-11-11

最新评论