厦门市建设管理协会网站首页p2p网站建设应注意的问题
如果想看如果CDATA在mybatis的xml文件中使用的可以直接跳转。
 
CDATA
- 1 XML中的CDATA
 - 1.1 为什么叫CDATA
 - 1.2 CDATA在XML中的语法
 - 1.3 CDATA在XML中的例子
 - 1.4 CDATA规则
 
- 2 Mybatis中的CDATA
 - 2.1 Mybatis中使用XML转义序列转义
 - 2.2 Mybatis中使用CDATA转义
 - 2.3 mybatis中使用CDATA需注意的点
 
1 XML中的CDATA
1.1 为什么叫CDATA
CDATA很明显不是个单词,为什么叫CDATA,其实在英文里是Character Data的缩写,直译是字符数据。也就是我们不想让解析器解释为标记,而是想让解析器解释为字符也就是Character的数据,我们就用CDATA来处理。比如这五种特殊字符 <, >,&,"和’。
1.2 CDATA在XML中的语法
<![CDATA[characters with markup
]]>
 
以上语法由三部分组成
- CDATA的开始部分:以 <![CDATA[ 这九个定界符开始
 - CDATA的结束部分:以 ]]> 结束
 - CData也就是字符数据的部分:在开始和结束部分之间填入的所有字符,都会被XML处理器忽略,包括其中的特殊字符 (<、> 和 &)。
 
1.3 CDATA在XML中的例子
<script><![CDATA[<message> Welcome to TutorialsPoint </message>]] >
</script >
 
上述的语句中,< message > 和 < /message > 之间的所有内容都被视为字符数据而不是标记。
1.4 CDATA规则
XML CDATA 需要遵循给定的规则
- CDATA 不能在 XML 文档的任何位置包含字符串“]]>”。
 - CDATA 部分不允许嵌套。
 
2 Mybatis中的CDATA
都是CDATA,我为什么把两者分开来讲,是因为我觉得在Mybatis中使用CDATA和单纯的在XML中使用CDATA有区别。
2.1 Mybatis中使用XML转义序列转义
| 特殊字符 | 转义序列 | 
|---|---|
| < | <; | 
| 》 | >; | 
| & | &; | 
| " | "; | 
| ’ | &apos; | 
例如
<select id="userInfo" parameterType="java.util.HashMap" resultMap="user">   SELECT id,newTitle, newsDay FROM newsTable WHERE 1=1  AND  newsday > #{startTime}AND  newsday > #{endTime}  </select>  
 
2.2 Mybatis中使用CDATA转义
为了防止五种特殊字符 <, >,&,"和’ 被解析器转义,就用 <![CDATA[ ]]> 来包含这些字符。
 例如:
<select id="userInfo" parameterType="java.util.HashMap" resultMap="user">   SELECT id,newTitle, newsDay FROM newsTable WHERE 1=1  AND  newsday <![CDATA[>=]]> #{startTime}AND newsday <![CDATA[<= ]]>#{endTime}  ]]>  </select> 
 
2.3 mybatis中使用CDATA需注意的点
上述两者转义方法中,大家都会推荐使用CDATA来进行转义,但是有一点需要大家注意。
 在被CDATA包围的所有字符串不会被mybatis解析, 直接写入sql了,CDATA应该只用在特殊字符前后,不能用在< if > < foreach >等标签前面,否则可能会导致mybatis的查询失败。
