一、轉義方法介紹
第一種方法:
用了轉義字符把>和<替換掉,然後就沒有問題了。例如:
SELECT * FROM test WHERE 1 = 1 AND start_date < = CURRENT_DATE AND
end_date >= CURRENT_DATE
常用的轉義字符如下:
< |
< |
小於號 |
> |
> |
大於號 |
& |
& |
和 |
' |
’ |
單引號 |
" |
" |
雙引號 |
因爲這個是xml格式的,所以不允許出現類似“>”這樣的字符,但是都可以使用
<![CDATA[ ]]>符號進行說明,將此類符號不進行解析你的可以寫成這個:
mapper文件示例代碼
<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>
二、兩種方式的說明:
在xml格式的文件中,對於“>”、“<”等符號是作爲特殊的符號使用的,所以當我們使用
這些符號的時候,往往不會正常的起作用,反而可能產生了語法錯誤。
而使用第一種方式需要注意以下幾個方面:
(1)轉義序列字符之間不能有空格;
(2) 轉義序列必須以”;”結束;
(3) 單獨出現的”&”不會被認爲是轉義的開始;
(4) 區分大小寫。
2.使用<![CDATA[ ]]>符號相對於使用轉義符方法來說是更加高效的。因爲,轉義前的字
符也好,轉義後的字符也好,都會被xml解析器解析,而使用<![CDATA[ ]]>符號來包含
不被轉義的內容,則是xml解析器能夠識別該符號爲忽略解析的內容。
另外,使用<![CDATA[ ]]>符號需要注意以下幾個方面:
(1) 此部分不能再包含”]]>”;
(2) 不允許嵌套使用;
(3)”]]>”這部分不能包含空格或者換行。
三、比較
最後,說說<![CDATA[]]>和xml轉移字符的關係,它們兩個看起來是不是感覺功能
重複了?
是的,它們的功能就是一樣的,只是應用場景和需求有些不同:
(1)<![CDATA[]]>不能適用所有情況,轉義字符可以;
(2) 對於短字符串<![CDATA[]]>寫起來囉嗦,對於長字符串轉義字符寫起來可讀性差;
(3) <![CDATA[]]>表示xml解析器忽略解析,所以更快。
注:對於有人說在mybatis的映射文件中,最好使用第二種方法,我還沒有找到相關依
據。如果,各位大神有什麼答案,或者什麼建議,還請不吝賜教。