Ibatis使用 isNotNull之伤

 在线上数据没有出现问题前,从来没有关注过和怀疑过sqlmap写的存在问题,更准备的讲是判断函数的使用存在问题。

出现这个问题,第一直觉数据是走订正造成的,因为sqlmap中使用的是非空非Null的值才会更新。妈蛋为后来的排查直接绕过了真正的原因。

分析过订正及线上Db执行过的SQL后发现,发起端全是由应用程序。呃,这时候开始有点紧张了,是不是代码结构存在问题.....

开始进行了排查之路,看了一下所有调用Update的操作,一其存在十几处,量上还可以。一个方法一个方法的进行排查,最后发现有一个接口问题最有嫌疑,直接拿前置给的对象直接UpdateDb数据....

 

然后,言归正转,再来看一下ibatis判断的函数意义.(我们使用的有isNotNull和isNotEmpty)

但是出事的那个字段使用的是isNotNull。这就是问题原因,下面罗列和区分一下他们之前的区另,对应的函数还有好多,这里不一一介绍。

在iBATIS中 isNull用于判断参数是否为NullisNotNull相反

在iBATIS中 isEmpty判断参数是否为Null或者空,满足其中一个条件则其true
在iBATIS中 isNotEmpty相反,当参数既不为Null也不为空是其为true

 

isNull, isNotNull与isEmpty, isNotEmpty区别

 

posted @ 2016-11-25 11:26  凡海雨  阅读(772)  评论(0编辑  收藏  举报