1.发生场景
-
在mybatis的使用过程中,经常会使用到类似于
<if>
、<when>
标签,这些标签中有涉及到test
条件判断,简单讲述一下曾经踩过的坑。 -
简单看如下代码:
<if test=" corpSts != null && corpSts =='1' "> order by create_time desc <if/>
出现的问题是当
cropSts
这个属性为1
时,order by create_time desc
这个语句并没有生效。
2.出现原因
- 其本质和Mybatis的解析方式有关,mybatis采用的是OGNL表达式进行解析。在 OGNL 表达式中,'0’会被解析成字符,又因为 java 是强类型的,char 和 String 类型不等,所以 if 标签中的 SQL 不会被解析。
3.解决方案
总的来说解决思路就是将这个比较值同样的变为String类型即可,方法如下:
-
第一种:将原本的单引号包围改成双引号包围,外围则改成单引号,这样在读取0这个值的时候会解析为String
<if test='corpSts == "1"'>
-
第二种:采用equals函数来进行字符串的比较
<if test='"1".equals(corpSts)'>
-
第三种:采用toString()函数将char类型解析成String类型==(个人工作中常用方式)==
<if test="corpSts == '1'.toString()">