mybatisPlus注解fill = FieldFill.UPDATE和updateStrategy = FieldStrategy.IGNORED的坑
由于当时使用mybatisPlus的updateById更新数据,习惯性的认为字段为null的不更新。但是上线后,出问题了。只更新状态字段,其他的一些属性竟然被置空了。
赶紧排查,发现实体类中这些字段有fill = FieldFill.UPDATE,导致更新的时候如果这个字段为null也会更新为null。
同样作用的还有@TableField(updateStrategy = FieldStrategy.IGNORED)。
解决方法:
1.只更新状态字段改为用sql编写,不使用mybatisplus的updateById。
2.另外定义实体,去掉这些注解。
引申:
突然想起来,mybatis自动生成代码工具中,为什么mapper中会有updateByPrimaryKeySelective和updateByPrimaryKey这两种方法了,一个是全量更新,一个是选择性更新。
在使用mybatisPlus时候,会涉及到全量更新和选择性更新。平常使用实体中没有使用特定注解(FieldFill.UPDATE和FieldStrategy.IGNORED),会导致页面的属性值无法清空,比如Date和BigDecimal这些类型,空的时候是为null。
如果为null那么mybatisPlus默认是不会更新为null。所以页面中的属性值无法清空。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2022-12-21 java书籍系列
2021-12-21 mybatis自动生成代码