在mybatis的mapper.xml中用以下语句判断条件:
<if test="name='0'">
and name=#{name}
</if>
实现,当name传入字符串0时,判断name的值
但是在实际运行过程中,这个判断条件并没有生效。
原因:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0’会被解析成字符,而java是强类型的,传入的是一个String类型,故而 char和String比较时是不相等的。所以sql中if标签是不会被解析的
解决方法:
一、使用用双引号
and name=#{name}二、使用toString()
<if test="name='0'.toString()">
and name=#{name}
</if>
推荐使用第二种toString方法。
PS:mybatis中的if、when等里面的test条件判断时,被判断的字段可以通过调用java.util.String的方法进行判断,如:
<when test='fwbdh.indexOf(",") != -1'>
AND t.FWBDH in (${fwbdh})
</when>