今天工作中发现一个Long类型的参数没有传到sql中去,在sql xml配置文件中是使用if test标签判断:
<if test="version != null and version != ''">and version = #{version,jdbcType=BigInt}</if>
version我传递的参数是0L
但是在sql执行时,总是判断没有传递此参数,所以没有添加此条件
后来才发现,0 !=null and 0 !=''语句中,0 !=null返回true,但是0 !=''返回false, and运算符所以if test 语句返回false,为什么0 !=''返回false????(因为我传递的是包装类型Long,因为包装类型除了有值的情况就是null,不会为""空字符串的,String类型不在我讨论的范围内,标题已经说了是数字0,况且如果是String的话就不会有这个问题了。)
解决办法:就是把0 !=''直接去掉。修改如下:
<if test="version != null">and version = #{version,jdbcType=BigInt}</if>