在MyBatis中使用<、<=?等特殊符號詳解
在實際的開發(fā)中,經(jīng)常會遇到一些場景,比如查詢小于某個時間,或者是查詢小于某個年齡等。
這個時候就需要在 MyBatis 的 XML 文件中使用一些 <、<= 等符號,但是如果直接使用的話文件會報錯:
Tag name expected
這個時候處理的話一般有以下三種方式:
1. 直接Java 處理(不推薦)
這種方法其實就是通過 #{param} 或者是 ${param} 直接在 Java 代碼中手動拼接,作為參數(shù)傳入,這樣寫的話代碼不方便維護,現(xiàn)在一般的話也很少有這樣的寫的,所以在這里就不說了。
2. 特殊符號轉(zhuǎn)義
可以通過轉(zhuǎn)義的方式去實現(xiàn)。
轉(zhuǎn)義也有好處,就是可讀性上有些差,如果忘了轉(zhuǎn)義字符的話還需要再次查,比較耗時,反正到現(xiàn)在有的時候我還是會忘記。
| 符號 | 轉(zhuǎn)義字符 | 描述 |
|---|---|---|
| < | < | 小于,需轉(zhuǎn)義 |
| <= | <= | 小于等于,需轉(zhuǎn)義 |
| > | > | 大于,無需轉(zhuǎn)義 |
| >= | >= | 大于等于,無需轉(zhuǎn)義 |
| & | & | 和,沒遇到相應場景 |
| ' | ' | 單引號,沒遇到相應場景 |
| '' | " | 雙引號,單引號,沒遇到相應場景 |
3. 硬核方法:<![CDATA[ ]]>
其實這個不是 MyBaits層面的處理,而是 XML 層面的處理,加上 <![CDATA[ ]]> 之后,在其里面的所有內(nèi)容將不會被解析,會原樣的被 MyBatis 拼接到 SQL 中,
使用方法如下:
<select id="list" resultType="com.study.mybatisdemo.model.SystemUser">
select * from system_user
<where>
<if test="age != null">
<![CDATA[
age < #{age}
]]>
</if>
<if test="id != null">
<![CDATA[
AND id < #{id}
]]>
</if>
</where>
</select>但是這里要注意 <![CDATA[ ]]> 的范圍,就和上面的例子一樣,<where> 與 <if> 標簽是 MyBaits 提供的,如果也將它們放在 <![CDATA[ ]]> 里面的話,會導致 MyBatis 無法解析這些動態(tài) SQL 標簽。
反例(錯誤的使用):
<select id="list" resultType="com.study.mybatisdemo.model.SystemUser">
select * from system_user
<![CDATA[
<where>
<if test="age != null">
age < #{age}
</if>
<if test="id != null">
AND id < #{id}
</if>
</where>
]]>
</select>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決spring boot hibernate 懶加載的問題
這篇文章主要介紹了解決spring boot hibernate 懶加載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Mybatis的collection三層嵌套查詢方式(驗證通過)
這篇文章主要介紹了Mybatis的collection三層嵌套查詢方式(驗證通過),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03

