1. 程式人生 > 程式設計 >mybatis中bind標籤和concat的使用說明

mybatis中bind標籤和concat的使用說明

首先,二種方式都可以用來模糊查詢,都能預防 SQL 注入。但是在更換資料庫情況下,bind標籤通用。

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

使用concat函式連線字串,在mysql中這個函式支援多個引數,但是在oracle中這個函式只支援2個引數,由於不同資料庫之間的語法差異,更換資料庫,這些語法就需要重寫。可以用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在Oracle資料庫下用concat函式模糊查詢之引數個數無效錯誤

Oracle拼接字串concat需要注意的小事項

在用ssm框架編寫程式碼的時候,因為資料庫換成了Oracle,在模糊查詢資料的時候突然發現報錯了

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

一直報錯引數個數無效,在網上查詢資料發現模糊查詢的sql語句還是concat('%','s','%')這樣寫的

但後面發現實際上oracle中不支援concat的三個引數的拼接,需要更正為

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

或者使用

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

以上這篇mybatis中bind標籤和concat的使用說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。