欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis 中的 if 条件 test

程序员文章站 2022-03-24 12:41:24
...

今天朋友问了一个问题,说MyBatis中怎么将 * 转义,当时心想直接用 <![CDATA[ ]]> 就ok了,后来发出代码原来是想将 if 条件中 test 的内容写成 *  ,直接看代码:

<if test='param != "*"'>
    index_code_${param}
</if>

说是第一行会报错,认为是转义问题。

其实这里并非转义问题,在标签 <if test="">   </if> 中的内容,MyBatis是使用的OGNL表达式来进行解析的,这个地方有一个坑需要注意下,单引号内有一个字符的情况下,OGNL会将其以 java 中的 char 类型进行解析,那么此时 char 类型与参数 String 类型用等号进行比较的时候结果都是false。解决方案也很简单,就是讲 test 中的单个字符用双引号括起来。

解决方案如下:

<if test="param != '*'">
    index_code_${param}
</if>

另外,MyBatis的if、when里面的test表达式对参数进行判断时,可以调用java的java.lang.String中定义的方法。例如:

<if test='param != "*"'>
    <choose>  
        <when test='param.indexOf("sub") != -1'>  
		
        </when>  
        <otherwise>   
	        
        </otherwise>  
    </choose> 
</if>

然后在说下 <![CDATA[ ]]>

在使用 MyBatis 时我们 sql 是写在 xml 映射文件中,如果写的 sql 中有一些特殊的字符的话,在解析 xml 文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]>来解决。这是 XML 的语法,在 CDATA 内部的内容都会被解析器忽略。

还有就是 mybatis 中常用的几个需要转义的字符:

特殊字符   替代符号

     &            &amp;

     <            &lt;

     >            &gt;

     "             &quot;

     '              &apos;