mybatis中bind標簽和concat的使用說明
首先,二種方式都可以用來模糊查詢,都能預(yù)防 SQL 注入。但是在更換數(shù)據(jù)庫情況下,bind標簽通用。
<if test=” userName != null and userName !=””> and userName like concat(’%’ ,#{userName},’%’)</if>
使用concat函數(shù)連接字符串,在mysql中這個函數(shù)支持多個參數(shù),但是在oracle中這個函數(shù)只支持2個參數(shù),由于不同數(shù)據(jù)庫之間的語法差異,更換數(shù)據(jù)庫,這些語法就需要重寫。可以用bind標簽來避免更換數(shù)據(jù)庫所帶來的一些麻煩。
bind 標簽可以使用 OGNL 表達式創(chuàng)建一個變量井將其綁定到上下文中。
<bind name= ' userNameBind ” value = ”’ % ’+ userNarne + ’ %’” /> <if test=” userName != null and userName !=””> and userName like #{userNameBind}</if>
bind 標簽的兩個屬性都是必選項, name 為綁定到上下文的變量名, value 為 OGNL 表達式。創(chuàng)建一個 bind 標簽的變量后 , 就可以在下面直接使用,使用 bind 拼接字符串不僅可以避免因更換數(shù)據(jù)庫而修改 SQL,也能預(yù)防 SQL 注入,還能實現(xiàn)多個引用userNameBind
補充知識:MyBatis在Oracle數(shù)據(jù)庫下用concat函數(shù)模糊查詢之參數(shù)個數(shù)無效錯誤
Oracle拼接字符串concat需要注意的小事項
在用ssm框架編寫代碼的時候,因為數(shù)據(jù)庫換成了Oracle,在模糊查詢數(shù)據(jù)的時候突然發(fā)現(xiàn)報錯了
select * from SYS_MENU where url like concat(’%’,#{roleName},’%’)
一直報錯參數(shù)個數(shù)無效,在網(wǎng)上查找資料發(fā)現(xiàn)模糊查詢的sql語句還是concat(’%’,’s’,’%’)這樣寫的
但后面發(fā)現(xiàn)實際上oracle中不支持concat的三個參數(shù)的拼接,需要更正為
select * from SYS_MENU where url like concat(concat(’%’,#{roleName}),’%’)
或者使用
select * from SYS_MENU where url like ’%’ || #{roleName} || ’%’;
以上這篇mybatis中bind標簽和concat的使用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解MySQL 數(shù)據(jù)庫隔離級別與MVCC2. Oracle災(zāi)難防護的關(guān)鍵技術(shù)3. Microsoft Office Access調(diào)整控件大小的方法4. 快速刪除ORACLE重復(fù)記錄5. MySql 如何實現(xiàn)無則插入有則更新6. 學(xué)好Oracle的六條總結(jié)7. ACCESS轉(zhuǎn)SQL數(shù)據(jù)庫相關(guān)的幾個技能8. 使用SQL語句創(chuàng)建觸發(fā)器的實例9. 數(shù)據(jù)庫Oracle9i的企業(yè)管理器簡介10. MySQL學(xué)習(xí)記錄之KEY分區(qū)引發(fā)的血案

網(wǎng)公網(wǎng)安備