mybatis 中的 if 条件 test

今天朋友问了一个问题,说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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值