Mybatis version:3.2.2
问题:如下sql语句,关注点在optStatus != '' 这句上。
select * from table
where ...
<if test="optStatus != null and optStatus != ''">
AND OPT_STATUS = #{optStatus,jdbcType=DECIMAL}
</if>
其中optStatus是数值类型。
此时如果optStatus传入参数为0时,按常理理解这个条件会执行 and OPT_STATUS=0 这个条件,但是诡异的事情发生了,这个条件没有执行,而如果optStatus为非0数字时,能够正常运行。先不说这个奇葩的写法,数值型用!=''判断(这里的用法肯定是不合理的),为啥传入0,看似满足的条件却不满足了呢。二话不说,只能撸源码。
前面就不看了(有兴趣debug一下),直接看重点,因为我们的条件是!=,所以定位到类ASTNotEq,看getValueBody方法:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.apache.ibatis.ognl;
c