mybatis中bind標(biāo)簽和concat的使用說明
首先,二種方式都可以用來模糊查詢,都能預(yù)防 SQL 注入。但是在更換數(shù)據(jù)庫(kù)情況下,bind標(biāo)簽通用。
<if test=” userName != null and userName !=””>
and userName like concat('%' ,#{userName},'%')
</if>
使用concat函數(shù)連接字符串,在mysql中這個(gè)函數(shù)支持多個(gè)參數(shù),但是在oracle中這個(gè)函數(shù)只支持2個(gè)參數(shù),由于不同數(shù)據(jù)庫(kù)之間的語法差異,更換數(shù)據(jù)庫(kù),這些語法就需要重寫??梢杂胋ind標(biāo)簽來避免更換數(shù)據(jù)庫(kù)所帶來的一些麻煩。
bind 標(biāo)簽可以使用 OGNL 表達(dá)式創(chuàng)建一個(gè)變量井將其綁定到上下文中。
<bind name= " userNameBind ” value = ”' % '+ userNarne + ' %'” />
<if test=” userName != null and userName !=””>
and userName like #{userNameBind}
</if>
bind 標(biāo)簽的兩個(gè)屬性都是必選項(xiàng), name 為綁定到上下文的變量名, value 為 OGNL 表達(dá)式。創(chuàng)建一個(gè) bind 標(biāo)簽的變量后 , 就可以在下面直接使用,使用 bind 拼接字符串不僅可以避免因更換數(shù)據(jù)庫(kù)而修改 SQL,也能預(yù)防 SQL 注入,還能實(shí)現(xiàn)多個(gè)引用userNameBind
補(bǔ)充知識(shí):MyBatis在Oracle數(shù)據(jù)庫(kù)下用concat函數(shù)模糊查詢之參數(shù)個(gè)數(shù)無效錯(cuò)誤
Oracle拼接字符串concat需要注意的小事項(xiàng)
在用ssm框架編寫代碼的時(shí)候,因?yàn)?span style="color: #ff00ff">數(shù)據(jù)庫(kù)換成了Oracle,在模糊查詢數(shù)據(jù)的時(shí)候突然發(fā)現(xiàn)報(bào)錯(cuò)了
select * from SYS_MENU where url like concat('%',#{roleName},'%')
一直報(bào)錯(cuò)參數(shù)個(gè)數(shù)無效,在網(wǎng)上查找資料發(fā)現(xiàn)模糊查詢的sql語句還是concat('%','s','%')這樣寫的
但后面發(fā)現(xiàn)實(shí)際上oracle中不支持concat的三個(gè)參數(shù)的拼接,需要更正為
select * from SYS_MENU where url like concat(concat('%',#{roleName}),'%')
或者使用
select * from SYS_MENU where url like '%' || #{roleName} || '%';
以上這篇mybatis中bind標(biāo)簽和concat的使用說明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)時(shí)間與字符串之間轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)時(shí)間與字符串之間轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
java類實(shí)現(xiàn)日期的時(shí)間差的實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于java類實(shí)現(xiàn)日期的時(shí)間差的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
SpringBoot之spring.factories的使用方式
這篇文章主要介紹了SpringBoot之spring.factories的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring MVC的文件上傳和下載以及攔截器的使用實(shí)例
這篇文章主要介紹了Spring MVC的文件上傳和下載以及攔截器的使用實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Java 數(shù)據(jù)庫(kù)連接池c3p0 介紹
這篇文章主要介給大家分享了 Java 數(shù)據(jù)庫(kù)連接池c3p0 介紹,c3p0 是一個(gè)成熟的、高并發(fā)的 JDBC 連接池庫(kù),支持緩存和 PreparedStatements 的重用。它以LGPL v.2.1或EPL v.1.0授權(quán),下面我們就一起來看看文章內(nèi)容的詳細(xì)介紹吧,需要的朋友也可以參考一下2021-11-11
spring?boot對(duì)敏感信息進(jìn)行加解密的項(xiàng)目實(shí)現(xiàn)
本文主要介紹了spring?boot對(duì)敏感信息進(jìn)行加解密的項(xiàng)目實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

