天天看點

Mybatis中的模糊查詢和sql中字元串拼接

Mybatis中的模糊查詢和sql中字元串拼接

Mybatis中的模糊查詢

今天下午做的一個功能,要用到模糊查詢,字段是description,剛開始我的寫法用的是sql中的模糊查詢語句,

Mybatis中的模糊查詢和sql中字元串拼接

但是這個有問題,隻有将字段的全部值傳入其中,才能查詢,是以不是迷糊查詢。

後來經過搜尋,發現要加上一個concat字段,要先将字元串拼接後,才能實作模糊查詢。

Mybatis中的模糊查詢和sql中字元串拼接

改成這個樣子後,模糊查詢功能實作。

在我搜尋到的部落格中海油别的幾種寫法,但是試驗了兩個,有一個成功,另外一個沒能實作模糊查詢,但是目前還不知道錯誤在哪裡。如果有人知道,請賜教。

他的部落格位址是:https://blog.csdn.net/luqin1988/article/details/7865643

第一種方法:

1. sql中字元串拼接

SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');      

我就是按照此方法實作了功能。

其實還有種方法:像這樣寫也行:

第二種方法:

2. 使用 ${...} 代替 #{...}

SELECT * FROM tableName WHERE name LIKE '%${text}%';      

這個我試過之後,發現并沒有實作模糊查詢的功能,而且目前也不知道哪裡出錯了,如果有人知道請指教。

第三種方法:

3. 程式中拼接

Java

// String searchText = "%" + text + "%";

String searchText = new StringBuilder("%").append(text).append("%").toString();

parameterMap.put("text", searchText);

SqlMap.xml

SELECT * FROM tableName WHERE name LIKE #{text};      

這個方法我沒有試過,但是還是記錄下來,以後試試

還有第四種方法

4. 大小寫比對查詢

SELECT *  FROM TABLENAME  WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'

或者 

SELECT *   FROM TABLENAME  WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'

正确。