背景:
由于项目某个功能用到优先级字段来判断,需要在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,能够正常入库了