CDATA是什么
- CDATA 是由XML定义的,跟Mybatis没啥关系。
- CDATA 指的是不由 XML 解析器进行解析的文本数据。被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。
- 全名:character data
- <![CDATA[]]>表示xml解析器忽略解析,比使用转义字符更快。
CDATA用法
- sql中有一些特殊的字符,在解析xml文件的时候会被转义。使用CDATA可以避免此类情况。比如包含”<”、”>”、”&”等字符,最好把他们都放到CDATA中。
CDATA写法
- <![CDATA[文本内容]]>
- CDATA的文本内容中不能出现字符串"]]>"
- CDATA不能嵌套。
- "]]>"这部分不能包含空格或者换行
CDATA的缺点
- mybatis中的<if test=""></if>、<where></where>、<choose></choose>、<trim></trim> 等这些标签不能写到CDATA中。否则标签将不会被mybatis解析。
<select id="getNewDlpOpenCallOrder" resultType="org.apache.commons.collections.map.CaseInsensitiveMap" parameterType="map" >
<![CDATA[
select s.*
from xxx s
where s.status<5
]]>
<if test="dateBegin != null and dateEnd != null" >
<![CDATA[and s.zb_ordertime between #{dateBegin,jdbcType=TIMESTAMP} and #{dateEnd,jdbcType=TIMESTAMP}]]>
</if>
</select>
在XML中,需要转义的字符有:
(1)& &
(2)< <
(3)> >
(4)" "
(5)' '