<sql id="MysqlDialectSuffix">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Thu Oct 10 09:46:29 CST 2013.
-->
<if test="page != null">
<![CDATA[ limit #{page.begin}, #{page.length} ) as temp_page_table) ]]>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</if>
</sql>
上述代码是利用mybatis的generator自动生成的代码,为什么要加﹤![CDATA[ ]]>呢?感觉完全没有必要的啊,里面的SQL语句并没有破坏xml文档结构,或引起sql错误的啊?为什么呢?
=============================================================
补充说明,我知道它的用法,我只是不明白sql的分页
limit #{page.begin}, #{page.length} ) as temp_page_table)
这个语句,为什么要加<![CDATA[]]>呢?
在 XML 元素中,"""&" 也會產生錯誤,因為解析器會把該字元解釋為字元實體的開始。
某些文本,例如 JavaScript 程式碼,包含大量 "CDATA 部分中的所有內容都會被解析器忽略。
假設有這麼一個SQL
如果不用CDATA封裝,xml解析器回去解析,結果遇到">"會導致文件結構錯誤
你這段sql是沒有,它應該是統一加的CDATA,防止你的sql裡面出現諸如"
理論上這個limit是沒有必要加上這個,我用的limit分頁是從來不用加上的,不過具體的你還是測試下,去除掉之後會不會報錯,防止"
W3C XML CDATA
CDATA與MyBatis並沒有關係。
術語 CDATA 指的是不應由 XML 解析器進行解析的文字資料(Unparsed Character Data)。 CDATA 部分中的所有內容都會被解析器忽略。
至於你的XML中即使沒有錯誤但是也增加了CDATA,樓主也說了是通過generator自動生成的代碼,既然是自動生成的那工具自然沒有人那麼聰明,只用最為通用的方式進行處理,這也無可後非。