当前位置: 首页 > article >正文

解决MybatisPlus updateById更新数据时将没传的数据也更新成了null

首先,MybatisPlus在调用自带的更新接口updateById时,如果没加任何配置,默认是不会将前端没传的数据也更新成null的。即MyBatisPlus不会更新传入实体中为null的字段,只会更新设置了不为null的值。 如果发现没传的也更新成null了的话,可以看看问题是否出在以下几个方面。

可能原因

1、后端定义的字段类型是否为包装类型?比如应该定义成Integer,结果你定义的是int,那么就算前端没传,也相当于传了默认值0,这样就把数据库原有的数据更新成0了。

2、该字段上是否加了注解?

@TableField(updateStrategy = FieldStrategy.IGNORED)

如果加了,那么就会打破MybatisPlus默认规则,将实体中为空的字段也更新成null了。

3、yml配置文件里是否有以下配置?

mybatis-plus:
  global-config:
    db-config:
      update-strategy: ignored

如果加了这个全局配置,就算字段上不加上述注解也没用了,默认就会把实体中为空的字段也更新成null。

解决方案

基础类型改为包装类型、去掉@TableField(updateStrategy = FieldStrategy.IGNORED)注解,这些都好做。但如果原因是出在上述第3条,配置文件里有微服务统一的配置,你也不好删,可以从以下两个角度考虑解决:

1、在mapper的xml里手写updateSelective的sql,即自己用sql控制字段在不为空的情况下才更新,不再用MybatisPlus的默认update接口。

2、在调用updateById前,首先用selectById将数据库的旧数据查出来,然后给这个旧实体赋上更新的数据,这样没传的那些数据也会带上旧的值了。


http://www.kler.cn/news/360683.html

相关文章:

  • 梦熊 CSP—S模拟赛 T2youyou不喜欢夏天
  • vue3 解决背景图与窗口留有间隙的问题
  • 【linux 多进程并发】0301 Linux创建后台服务进程,daemon进程,自己的进程可以被一号进程接管啦
  • 电影评论网站:Spring Boot技术应用案例
  • 银行数字化转型导师坚鹏:2025年银行开门红8大思考
  • 代码训练营 day36|LeetCode 56,LeetCode 738
  • 架构设计笔记-20-补充知识
  • 苍穹外卖--开发记录day07
  • 64-基于TMS320C6455、XC5VSX95T 的6U CPCI无线通信处理平台
  • 数据脱敏方案总结
  • 下载Vue脚手架
  • LeetCode两数之和
  • 【acwing】算法基础课-搜索与图论
  • 拥抱云开发的未来:腾讯云数据库、云模板与AI智能化的应用场景探索
  • 13.1 Linux_网络编程_TCP/UDP
  • C++|sort函数
  • 【C++】C++多态世界:从基础到前沿
  • SpringCloud-负载均衡-ribbon
  • 【学习笔记】网络流
  • YOLOv11改进-卷积-引入小波卷积WTConv 解决多尺度小目标问题