mybatis if 标签的一般用法:
方法一:
<if test="keyword != null and keyword !=''">
and column_a like concat('%',#{keyword},'%')
</if>
或者这样,方法二:
<if test="keyword != null and keyword !=''">
and column_a like concat('%',#{keyword},'%')
</if>
也就是说,test条件可以用双引号括起来,里面的字符串用单引号,也可以test条件用单引号括起来,里面的字符串用双引号.两种写法都可以.
但是当我要比较keyword是否等于"a"时,用方法一是写成如下:
<if test="keyword =='a'">
and column_a = 'a'
</if>
这时如果keyword的值是"a",运行的时候会报这样的异常:java.lang.NumberFormatException: For input string: "a".
解决方法如下:
用方法二的方式:
<if test='keyword =="a"'>
and column_a = 'a'
</if>
或者还是用方法一,但是'a'改成'a'.toString()
<if test="keyword =='a'.toString()">
and column_a = 'a'
</if>
原因是ognl语法问题, test条件内的长度为1的字符串'a'会被当成char类型,所以传入的keyword值会转成数字与其比较,如果keyword的值是"a",就会报错,但如果是如<if test="keyword =='ab'"><if test="keyword ==''">这样的写法就不会有这种问题,因为只有单个字符才会被当成char类型,'ab'和''还是当成字符串做比较的.