Ibatis使用 isNotNull之伤
在线上数据没有出现问题前,从来没有关注过和怀疑过sqlmap写的存在问题,更准备的讲是判断函数的使用存在问题。
出现这个问题,第一直觉数据是走订正造成的,因为sqlmap中使用的是非空非Null的值才会更新。妈蛋为后来的排查直接绕过了真正的原因。
分析过订正及线上Db执行过的SQL后发现,发起端全是由应用程序。呃,这时候开始有点紧张了,是不是代码结构存在问题.....
开始进行了排查之路,看了一下所有调用Update的操作,一其存在十几处,量上还可以。一个方法一个方法的进行排查,最后发现有一个接口问题最有嫌疑,直接拿前置给的对象直接UpdateDb数据....
然后,言归正转,再来看一下ibatis判断的函数意义.(我们使用的有isNotNull和isNotEmpty)
但是出事的那个字段使用的是isNotNull。这就是问题原因,下面罗列和区分一下他们之前的区另,对应的函数还有好多,这里不一一介绍。
在iBATIS中 isNull用于判断参数是否为Null,isNotNull相反
在iBATIS中 isEmpty判断参数是否为Null或者空,满足其中一个条件则其true
在iBATIS中 isNotEmpty相反,当参数既不为Null也不为空是其为true
isNull, isNotNull与isEmpty, isNotEmpty区别