<![CDATA[ ]]>标签
XML 格式不支持解析 “&”、“<”、“>”等符号,这些字符在xml解析的时候会被转义,解决方法
- 加上CDATA标签避免报错。在该标签内的语句,将不会被当成字符串来处理,而是直接当成sql语句;
- <![CDATA[ ]]>是xml语法,在<![CDATA[ ]]>内部的所有内容都会被解析器忽略,**不进行转义**
- 在mybatis中像
<if></if>
这样的标签如果放在<![CDATA[ ]]>中也会被解析器忽略,所以要尽可能缩小<![CDATA[ ]]>的范围
- 转义字符
转义字符
原符号 | 转移符号 | 释义 |
---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 和 |
’ | ' | 单引号 |
" | " | 双引号 |
测试代码
<select id="forShow" resultType="java.util.Map">
select *
from
test_table
where
<choose>
<when test='param1 == "1"'>
ord < 2 <!-- 此行代码编译不通过 -->
</when>
<when test='param1 == "2"'>
<![CDATA[ord<2]]> <!-- ord < 2 -->
</when>
<when test='param1 == "3"'>
ord <![CDATA[<]]> 2 <!-- ord < 2 -->
</when>
<when test='param1 == "4"'>
ord < 2 <!-- ord < 2 -->
</when>
<when test='param1 == "5"'>
ord > 2
</when>
<when test='param1 == "6"'>
TEST_ID = "1"
</when>
<when test='param1 == "7"'>
TEST_ID = '2'
</when>
</choose>
</select>
测试结果
经过测试,
- 在xml中使用
<
的时候是不会通过编译的 >
、'
、"
三者可以在xml的sql中使用;&
的测试代码有待探究