mybatis模糊查詢之bind標簽和concat函數用法詳解

1.二種方式都可以用來模糊查詢,都能預防 SQL 註入。但是在更換數據庫情況下,bind標簽通用。

<if test=” userName != null and userName !=””>
 and userName like concat('%' ,#{userName},'%')
</if>

2.使用concat函數連接字符串,在mysql中這個函數支持多個參數,但是在oracle中這個函數隻支持2個參數,由於不同數據庫之間的語法差異,更換數據庫,這些語法就需要重寫。可以用bind標簽來避免更換數據庫所帶來的一些麻煩。

eg.MyBatis在Oracle數據庫下用concat函數模糊查詢之參數個數無效錯誤,因為數據庫換成瞭Oracle,在模糊查詢數據的時候突然發現報錯瞭

select * from SYS_MENU where url like concat('%',#{roleName},'%')

實際上oracle中不支持concat的三個參數的拼接,需要更正為

select * from SYS_MENU where url like concat(concat('%',#{roleName}),'%')

或者使用

select * from SYS_MENU where url like '%' || #{roleName} || '%';

bind標簽使用:

bind 標簽可以使用 OGNL 表達式創建一個變量井將其綁定到上下文中。

<bind name= " userNameBind ” value = ”' % '+ userNarne + ' %'” />
 <if test=” userName != null and userName !=””>
 and userName like #{userNameBind}
</if>

bind 標簽的兩個屬性都是必選項
name 為綁定到上下文的變量名, value 為 OGNL 表達式。
創建一個 bind標簽的變量後 , 就可以在下面直接使用,使用 bind 拼接字符串不僅可以避免因更換數據庫而修改 SQL,也能預防 SQL註入,還能實現多個引用userNameBind

到此這篇關於mybatis模糊查詢之bind標簽和concat函數用法的文章就介紹到這瞭,更多相關mybatis模糊查詢內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: