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

相关推荐
W.Buffer1 小时前
MyBatis 源码深度解析:从 Spring Boot 实战到底层原理
spring boot·后端·mybatis
生莫甲鲁浪戴1 小时前
Android Studio新手开发第三十五天
android·ide·android studio
qq_717410011 小时前
FAQ20472:相机录像镜像功能实现
android
非专业程序员Ping3 小时前
HarfBuzz 实战:五大核心API 实例详解【附iOS/Swift实战示例】
android·ios·swift
流星魂小七3 小时前
颜色选择器
android·着色器·环形颜色选择器·圆形颜色选择器·colorpicker·colorwheelview
cdming4 小时前
LIUNX 与手机安卓的文件互传 的常用方法
android·智能手机
CS Beginner4 小时前
【搭建】个人博客网站的搭建
java·前端·学习·servlet·log4j·mybatis
雨白5 小时前
Flow 的异常处理与执行控制
android·kotlin
00后程序员张6 小时前
Web 前端工具全流程指南 从开发到调试的完整生态体系
android·前端·ios·小程序·uni-app·iphone·webview
ClassOps6 小时前
Gradle Groovy 和 Kotlin kts 语法对比
android·kotlin·gradle·groovy