【DB 系列】Mybatis 之轉義符的使用姿勢
在 mybatis 的 xml 檔案中直接寫 sql 比較方便簡潔,但是需要注意的是,在 xml 檔案中,經常會遇到一些需要轉義的場景,比如查詢 id < xxx
的資料,這個小於號就不能直接寫在 sql 中,接下來我們將看一下,mybatis 中的有哪些轉義符,可以怎麼處理轉義問題
<!-- more -->
I.轉義
1. 轉義符
在 mybatis 的 xml 檔案中,我們最常見的轉義符為小於號,如查詢 id 小於 100 的資料
<select id="xxx">
select * from `money` where id < #{id}
</select>
注意上面的 sql,小於號實際使用的是 <
,不能直接使用 <
,比如直接使用小於號,在 idea 中會有如下的錯誤提示
日常開發中除了上面的小於號之外,另外一個常見的則是 &
與操作符,如果 sql 中有位操作的場景,同樣需要轉義
<select id="xxx">
-- select * from `money` where id & 1 = 1 的sql,需要如下轉義
select * from `money` where id & 1 = 1
</select>
在 mybatis 中常見的幾個轉義字元表對映關係如下表 (mybatis 的轉義實際上完全遵循的是 xml 轉義規則,主要有下面幾個)
符號 | 轉義 | 說明 |
---|---|---|
< | < | 小於 |
> | > | 大於 |
& | & | 與 |
' | ' | 單引號 |
" | " | 雙引號 |
2. <![CDATA[ ]]> 寫法
通過轉義的方式雖然簡單,但是有一個問題就是不夠直觀,在閱讀 sql 時,還需要在腦海裡反轉義一下,這樣就不太友好了,好在 xml 提供了 CDATA 的語法,被包裹在它內部的語句,不會被 xml 解析器進行解析
如通過下面的寫法來寫與操作
<select id="queryBitCondition" resultType="long">
select id from money where <![CDATA[ `money` & #{bit} = #{bit} ]]>
</select>
使用這種方式時,需要注意:
- 不支援巢狀的寫法
- 結尾符
]]>
注意與起始符配套使用
III. 不能錯過的原始碼和相關知識點
0. 專案
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 原始碼:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/103-mybatis-xml
系列博文:
1. 微信公眾號: 一灰灰 Blog
盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現 bug 或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛
- 一灰灰 Blog 個人部落格 https://blog.hhui.top
- 一灰灰 Blog-Spring 專題部落格 http://spring.hhui.top