mybatis 判断 if 标签里的test值可见mybatis源码
IfSqlNode -> apply() 方法
追踪源码可知,最终是通过OGNL类判断的,所以我们可以看
OgnlOps.equal( v1, v2 )
个人总结如下
OGNL的比较逻辑,是以转为数字为核心,它会尝试将 value转为数字
具体规则如下
如果为Integer,Double等直接是数字,
如果俩者都是数字型,则比较值的大小 例如 1==1.00 是true
如果都不是数值型,并且 不是都继承了 Comparable,则通过 equals比较
如果都不是数值型,并且继承了Comparable,或者为枚举型,则通过compareTo 比较
否则,一个数值型,一个不是,则会尝试将非数值型转为数值,
如果是 boolean型,true为1,false为0
如果是单引号,'12' 里面的长度为0,则返回值为0;长度为1,则为char,长度大于1 则为 string
如果是 char,它会通过 asii 码转为 double(ps '1' asii码为49,' ' 空格 asii码为32)
如果是string,这尝试转为数值,无法转换,则false,否则,进行数值比较
如果是双引号,则视为字符串 "1",则会被转为数值 1,
char型,也可以通过 '1'.toString() 来转为字符串