在MyBatis中使用<、<=?等特殊符號(hào)詳解
在實(shí)際的開(kāi)發(fā)中,經(jīng)常會(huì)遇到一些場(chǎng)景,比如查詢小于某個(gè)時(shí)間,或者是查詢小于某個(gè)年齡等。
這個(gè)時(shí)候就需要在 MyBatis 的 XML 文件中使用一些 <、<= 等符號(hào),但是如果直接使用的話文件會(huì)報(bào)錯(cuò):
Tag name expected
這個(gè)時(shí)候處理的話一般有以下三種方式:
1. 直接Java 處理(不推薦)
這種方法其實(shí)就是通過(guò) #{param} 或者是 ${param} 直接在 Java 代碼中手動(dòng)拼接,作為參數(shù)傳入,這樣寫(xiě)的話代碼不方便維護(hù),現(xiàn)在一般的話也很少有這樣的寫(xiě)的,所以在這里就不說(shuō)了。
2. 特殊符號(hào)轉(zhuǎn)義
可以通過(guò)轉(zhuǎn)義的方式去實(shí)現(xiàn)。
轉(zhuǎn)義也有好處,就是可讀性上有些差,如果忘了轉(zhuǎn)義字符的話還需要再次查,比較耗時(shí),反正到現(xiàn)在有的時(shí)候我還是會(huì)忘記。
| 符號(hào) | 轉(zhuǎn)義字符 | 描述 |
|---|---|---|
| < | < | 小于,需轉(zhuǎn)義 |
| <= | <= | 小于等于,需轉(zhuǎn)義 |
| > | > | 大于,無(wú)需轉(zhuǎn)義 |
| >= | >= | 大于等于,無(wú)需轉(zhuǎn)義 |
| & | & | 和,沒(méi)遇到相應(yīng)場(chǎng)景 |
| ' | ' | 單引號(hào),沒(méi)遇到相應(yīng)場(chǎng)景 |
| '' | " | 雙引號(hào),單引號(hào),沒(méi)遇到相應(yīng)場(chǎng)景 |
3. 硬核方法:<![CDATA[ ]]>
其實(shí)這個(gè)不是 MyBaits層面的處理,而是 XML 層面的處理,加上 <![CDATA[ ]]> 之后,在其里面的所有內(nèi)容將不會(huì)被解析,會(huì)原樣的被 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> 標(biāo)簽是 MyBaits 提供的,如果也將它們放在 <![CDATA[ ]]> 里面的話,會(huì)導(dǎo)致 MyBatis 無(wú)法解析這些動(dòng)態(tài) SQL 標(biāo)簽。
反例(錯(cuò)誤的使用):
<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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MyBatis中<collection>標(biāo)簽的多種用法
- MyBatis主鍵生成策略中useGeneratedKeys和<selectKey>的區(qū)別
- 在MyBatis的XML映射文件中<trim>元素所有場(chǎng)景下的完整使用示例代碼
- mybatis解決<foreach>標(biāo)簽不能超過(guò)1000的問(wèn)題
- MyBatis動(dòng)態(tài)SQL之<choose><when><o(jì)therwise>標(biāo)簽的使用
- Mybatis查詢返回Map<String,Object>類(lèi)型的實(shí)現(xiàn)
- mybatis?查詢返回Map<String,Object>類(lèi)型
相關(guān)文章
SpringBoot實(shí)現(xiàn)ORM操作MySQL的幾種方法
本文主要介紹了SpringBoot實(shí)現(xiàn)ORM操作MySQL的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Spring?Boot?啟動(dòng)參數(shù)之如何優(yōu)雅地控制你的應(yīng)用(最新推薦)
Spring Boot 提供了哪些方式來(lái)配置這些啟動(dòng)參數(shù),今天我們就來(lái)詳細(xì)解析 Spring Boot 啟動(dòng)參數(shù)的各種用法,并附帶代碼示例,讓你可以靈活掌控應(yīng)用的啟動(dòng)過(guò)程,需要的朋友可以參考下2025-04-04
SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案
這篇文章主要介紹了SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
java compare compareTo方法區(qū)別詳解
本文主要介紹了java compare compareTo方法區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
關(guān)于Java數(shù)組查詢的相關(guān)問(wèn)題及實(shí)例
這篇文章主要介紹了關(guān)于Java數(shù)組查詢的相關(guān)問(wèn)題及實(shí)例,需要的朋友可以參考下。2017-08-08
IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正(最新推薦)
北京時(shí)間2023年7月26日,IntelliJ IDEA 2023.2正式發(fā)布,IntelliJ IDEA 2023.2 引入 AI Assistant(AI助手),通過(guò)一組由 AI 提供支持的功能助力開(kāi)發(fā),今天給大家分享IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正,感興趣的朋友一起看看吧2023-10-10

