10.MyBatis中特殊字符的处理

 

MyBatis中<![CDATA[]]>的作用

在使用MyBatis时SQL语句写在xml映射文件中,SQL语句中的特殊字符在解析xml文件的时候会被转义,<,>,&等字符不能直接存入xml中,否则xml语法检查时会报错。

Example:

1
<id> id < 30</id>

上面这种写法会报错。

如果想在xml中使用这些符号,不希望特殊字符被转义,有两种解决方法:

  1. 使用转义字符,如&lt;,&gt;,&amp;

  2. 使用<![CDATA[ ]]>

1. 转义字符

1
<id> id &lt; 30 </id>

在读取的时候,解析器会自动将这些转义字符转换回<,>,&

XML的转义字符有:

特殊字符 转义字符
& &amp;
< &lt;
> &gt;
&quot;
&apos;
严格来说,在XML中只有”<”和”&”是非法的,其它三个都是可以合法存在的,但是把它们都进行转义是一个好的习惯。

Note:

  1. 转义序列字符之间不能有空格;

  2. 转义序列必须以”;”结束;

  3. 单独出现的”&”不会被认为是转义的开始;

  4. 区分大小写。

2. <![CDATA[ ]]>

<![CDATA[ ]]>是xml语法,在CDATA内部的所有内容会被解析器忽略。

可以将包含特殊字符的文本放入<![CDATA[ ]]>

Note:

  1. <![CDATA[ ]]>中的文本不能再包含”]]>”;

  2. <![CDATA[ ]]>不允许嵌套使用;

  3. <![CDATA[ ]]>中的文本不能包含空格或者换行。

3. 转义字符和<![CDATA[ ]]>

相同点:

<![CDATA[ ]]>和转义字符功能相同:

不同点:   

  1. <![CDATA[ ]]>适合长文本,转义字符适合短文本。

  2. <![CDATA[ ]]>表示xml解析器忽略解析,所以更快。