【踩坑日记】关于Mybatis中标签判断不生效

工作所想 / 2022-10-19

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()">
    
快乐与分享!