Mybatis?mysql模糊查詢方式(CONCAT多個字段)及bug
Mybatis mysql模糊查詢及bug
先看下如下xml
SELECT
t.id,
t.mobile,
t.account_name
FROM
t_account t
WHERE
1=1
<if test="keyWord !=null and keyWord !=''">
and CONCAT(t.id,t.mobile,t.account_name) like CONCAT('%',#{keyWord},'%')
</if>
正常來說這樣寫沒問題的,但是如果你CONCAT的字段中有一個字段為null時,那這條數(shù)據(jù)將查詢不到,說白了,只要有一個字段為null,就查不到數(shù)據(jù)了。
先看下以下數(shù)據(jù)。

從上圖可以發(fā)現(xiàn),id為7的mobile為null的,接下來咱們測試下結(jié)果。
根據(jù)account_name模糊查詢:查詢柳巖是能查到數(shù)據(jù)的,如下圖

查詢張三是查詢不到數(shù)據(jù)的,如下圖

根據(jù)Id查id為7的也是查不到的,如下圖

結(jié)論:CONCAT的字段中有任意一個字段為null時,那這條數(shù)據(jù)將查詢不到
解決方案:一
改成用or連接
SELECT
t.id,
t.mobile,
t.account_name
FROM
t_account t
WHERE
1=1
<if test="keyWord !=null and keyWord !=''">
and CONCAT(t.id) like CONCAT('%',#{keyWord},'%')
or CONCAT(t.mobile) like CONCAT('%',#{keyWord},'%')
or CONCAT(t.account_name) like CONCAT('%',#{keyWord},'%')
</if>
看下運行結(jié)果:查到張三這條數(shù)據(jù)了

解決方案:二
判null處理
SELECT
t.id,
t.mobile,
t.account_name
FROM
t_account t
WHERE
1=1
and CONCAT( IFNULL(t.id,''),IFNULL(t.mobile,''),IFNULL(t.account_name,'') ) like CONCAT('%',#{keyWord},'%')

mybatis多個字段如何模糊查詢一個值
使用oracle concat 函數(shù)拼接字符 再進(jìn)行l(wèi)ike 操作
<if test="searchContent!=null and searchContent!=''">
CONCAT(CONCAT(CONCAT(CONCAT(venderDesc,purcher),demandOrg),contactInfo),materialDesc) like#{searchContent}
</if>
注:venderDesc,purcher,demandOrg,contactInfo,materialDesc為表的字段,想要拼接哪個字段就拼哪個字段
有些作者說 CONCAT(venderDesc,purcherdemandOrg,demandOrg,contactInfo,materialDesc) 這樣也能實現(xiàn),但本人經(jīng)測試這個是不行的,會報參數(shù)錯誤,可能是跟數(shù)據(jù)庫的版本有關(guān)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
activemq整合springboot使用方法(個人微信小程序用)
這篇文章主要介紹了activemq整合springboot使用(個人微信小程序用),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
java實體類轉(zhuǎn)json時null值不要轉(zhuǎn)為"null"問題
這篇文章主要介紹了java實體類轉(zhuǎn)json時null值不要轉(zhuǎn)為“null”問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Springboot使用put、delete請求報錯405的處理
這篇文章主要介紹了Springboot使用put、delete請求報錯405的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
打開.properties中文顯示unicode編碼問題以及解決
這篇文章主要介紹了打開.properties中文顯示unicode編碼問題以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringMVC自定義類型轉(zhuǎn)換器實現(xiàn)解析
這篇文章主要介紹了SpringMVC自定義類型轉(zhuǎn)換器實現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
SpringBoot微服務(wù)注冊分布式Consul的詳細(xì)過程
這篇文章主要介紹了SpringBoot(微服務(wù))注冊分布式Consul,Spring Boot應(yīng)用可以通過向Consul注冊自身來實現(xiàn)服務(wù)發(fā)現(xiàn)和治理,使得其他服務(wù)可以在Consul中發(fā)現(xiàn)并調(diào)用它,需要的朋友可以參考下2023-04-04

