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,能够正常入库了

相关推荐
Sugobet4 小时前
【安卓][Mac/Windows】永久理论免费 无限ip代理池 - 适合临时快速作战
android·tcp/ip·macos·网络安全·渗透测试·ip代理池·接入点
fatiaozhang95278 小时前
创维智能融合终端SK-M424_S905L3芯片_2+8G_安卓9_线刷固件包
android·电视盒子·刷机固件·机顶盒刷机
来来走走9 小时前
Flutter开发 了解Scaffold
android·开发语言·flutter
哆啦A梦的口袋呀10 小时前
Android 底层实现基础
android
闻道且行之10 小时前
Android Studio下载及安装配置
android·ide·android studio
alexhilton11 小时前
初探Compose中的着色器RuntimeShader
android·kotlin·android jetpack
小墙程序员11 小时前
kotlin元编程(二)使用 Kotlin 来生成源代码
android·kotlin·android studio
Asu520211 小时前
思途Mybatis学习 0805
java·spring boot·学习·mybatis
小墙程序员11 小时前
kotlin元编程(一)一文理解 Kotlin 反射
android·kotlin·android studio
fatiaozhang952712 小时前
创维智能融合终端DT741_移动版_S905L3芯片_安卓9_线刷固件包
android·电视盒子·刷机固件·机顶盒刷机