在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)義 |
& | & | 和,沒遇到相應(yīng)場景 |
' | ' | 單引號,沒遇到相應(yīng)場景 |
'' | " | 雙引號,單引號,沒遇到相應(yīng)場景 |
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot集成ClickHouse及應(yīng)用場景分析
這篇文章主要介紹了Springboot集成ClickHouse的實例代碼,本文通過應(yīng)用場景實例代碼介紹了整合springboot的詳細過程,感興趣的朋友跟隨小編一起看看吧2022-02-02MyBatisPlus條件構(gòu)造器的實現(xiàn)示例
本文主要介紹了MyBatisPlus條件構(gòu)造器的實現(xiàn)示例,主要包括了QueryWrapper,UpdateWrapper,LambdaQueryWrapper,LambdaUpdateWrapper這四種,具有一定的參考價值,感興趣的可以了解下2023-12-12解決spring boot hibernate 懶加載的問題
這篇文章主要介紹了解決spring boot hibernate 懶加載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10Mybatis的collection三層嵌套查詢方式(驗證通過)
這篇文章主要介紹了Mybatis的collection三層嵌套查詢方式(驗證通過),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03