目錄
1. 使用場景
因爲我們在日常代碼Mybatis 動態拼接語句時候經常使用到 大於(>,>=)、小於(<,<=)、不等於(<> ,!=)符號。由於此符號包含了尖括號,Mybatis使用的 *.xml文件格式。於是
需要之內尖括號進行相關的轉義或者使用 CDATA 區段。
2、實現方式
2.1、轉義特殊符號方式
註釋:嚴格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號、引號和大於號是合法的,但是把它們替換爲實體引用是個好的習慣。
符號 | 原符號 | 替換符號 |
---|---|---|
小於 | < | < |
小於等於 | <= | <= |
大於 | > | > |
大於等於 | >= | >= |
不等於 | <> | <> |
與 | & | & |
單引號 | ’ | ' |
雙引號 | " | " |
mapper文件寫法:
select * form tablenme t where t.code <> 1
2.2、使用 CDATA 區段
所有 XML 文檔中的文本均會被解析器解析。只有 CDATA 區段(CDATA section)中的文本會被解析器忽略。
大於等於 <![CDATA[ >= ]]>
小於等於 <![CDATA[ <= ]]>
不等於<![CDATA[ <> ]]>
mapper文件寫法:
select t.* form tablenme t where t.code <![CDATA[<>]]> 1
3、Mybatis if 判斷等於一個字符串
當傳入的type的值爲note 的時候,if判斷內的sql也不會執行。
<if test="type=='note'">
and status = 0
</if>
mybatis是使用的OGNL表達式來進行解析的,在OGNL的表達式中,'note'會被解析成字符,因爲java是強類型的,char 和 一個String 會導致不等。所以if標籤中的sql不會被解析。
需要解決這個問題,只需要把代碼修改成:
<if test='type=="note"'> //注意是雙引號,不是單引號!!!
and status = 0
</if>
4、mysql二進制轉成字符串
SELECT cast(fieldName as CHAR) FROM tablename