Mybatis之Integer类型字段为0,入库为null

背景:

由于项目某个功能用到优先级字段来判断,需要在mysql表中定义一个字段XX,类型为int,默认为0,具体值由后台配置,正常入库即可

问题:

由于后台配置存量其他类型的数据无需该字段,也不想动存量,所以该字段传给后台为null,insert操作后,mysql表中该字段为null,但是期望为0

所以代码中对该字段进行处理,判断XX字段为null,则手动赋值0,否则取后台配置的值。

java 复制代码
//特殊处理代码
InfoDO.setXx(request.getXX() == null ? 0 : request.getXX());

正常情况下是可以解决问题,但发现还是解决不了问题,虽然手动赋值0,但落DB还是null

解决:

起初以为是Mybatis的一个坑,Integer类型,如果值为0,落DB都是为null的(以为0都会被mybatis框架转换为null),那这样就莫名其妙了。各种百度,依旧没有找到解决办法

尝试着从后台给该字段传一个0,发现能够正常入库,DB显示的是0,所以还是可以传0的

觉得挺奇怪的,手动赋值0 和 后台传的0有什么区别?后来想着后台传过来的0,经过反序列化后是一个Integer对象,而手动赋值的是一个基本数据类型,那手动赋值就给它new一个对象Integer,试试看,如下

java 复制代码
//特殊处理代码
InfoDO.setXx(request.getXX() == null ? new Integer(0) : request.getXX());

这样处理后,发现如果后台XX字段传null,特殊处理赋值0,能够正常入库了

相关推荐
刘大浪18 分钟前
uniapp 实战新闻页面(一)
android·uni-app
水沝淼燚34 分钟前
kmp的实际使用1,开发android项目和native转kotlin开发
android
CYRUS_STUDIO1 小时前
破解 VMP+OLLVM 混淆:通过 Hook jstring 快速定位加密算法入口
android·算法·逆向
Renounce1 小时前
【Android】四大组件Service
android
熙客1 小时前
Redis底层数据结构与内部实现
数据库·redis·mybatis
没有了遇见1 小时前
Activity 启动模式总结
android
wangjialelele1 小时前
二叉树基本学习
android
雨白5 小时前
Android 音视频播放:MediaPlayer 与 VideoView
android
Harry技术5 小时前
Fragment 和 AppCompatActivity 两个核心组件设计的目的和使用场景对比
android·android studio
Renounce5 小时前
【Android】四大组件Activity
android