1. 程式人生 > 實用技巧 >mybatis中的CDATA標籤的用法

mybatis中的CDATA標籤的用法

轉自: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[<]]> 分別對大於和小於轉義