mybatis中的CDATA標籤的用法
阿新 • • 發佈:2020-09-21
轉自:https://blog.51cto.com/kisuntech/1313797、
術語 CDATA 指的是不應由 XML 解析器進行解析的文字資料(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 會產生錯誤,因為解析器會把該字元解釋為新元素的開始。
"&" 也會產生錯誤,因為解析器會把該字元解釋為字元實體的開始。
某些文字,比如 JavaScript 程式碼,包含大量 "<" 或 "&" 字元。為了避免錯誤,可以將指令碼程式碼定義為 CDATA。
CDATA 部分中的所有內容都會被解析器忽略。
CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:
<![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then { return 1; } else { return 0; } } ]]>
在mapper檔案中寫sql語句時,遇到特殊字元時,如:< 等,建議使用<![CDATA[ sql 語句 ]]>標記,將sql語句包裹住,不被解析器解析
例子:
分別根據不同條件查資料,獲得一個list,元素為每個查詢的結果條目數,多用於校驗
<!-- 校驗中文名和英文名是否存在 返回長度為2的list -->
<select id="getMenuCnameAndEnameCount" parameterType="com.ebon.platform.menu.vo.SysMenu"
resultType="Integer">
SELECT
COUNT(ID)
FROM SYS_MENU M
WHERE M.CNAME = #{cname}
AND M.PARENT_ID =
#{parentId}
AND M.DELETE_FLAG = 0
<if test="null!=id and id!=''">
AND M.ID <![CDATA[<]]> <![CDATA[>]]>
#{id}
</if>
UNION ALL
SELECT
COUNT(ID)
FROM SYS_MENU M
WHERE M.ENAME = #{ename}
AND M.PARENT_ID =
#{parentId}
AND M.DELETE_FLAG = 0
<if test="null!=id and id!=''">
AND M.ID <![CDATA[<]]> <![CDATA[>]]>
#{id}
</if>
</select>
注:不等於<>,在mybatis中需要轉義 用<![CDATA[<]]> 分別對大於和小於轉義