Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及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的字段中有一個(gè)字段為null時(shí),那這條數(shù)據(jù)將查詢不到,說白了,只要有一個(gè)字段為null,就查不到數(shù)據(jù)了。
先看下以下數(shù)據(jù)。
從上圖可以發(fā)現(xiàn),id為7的mobile為null的,接下來咱們測(cè)試下結(jié)果。
根據(jù)account_name模糊查詢:查詢柳巖是能查到數(shù)據(jù)的,如下圖
查詢張三是查詢不到數(shù)據(jù)的,如下圖
根據(jù)Id查id為7的也是查不到的,如下圖
結(jié)論:CONCAT的字段中有任意一個(gè)字段為null時(shí),那這條數(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>
看下運(yùn)行結(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多個(gè)字段如何模糊查詢一個(gè)值
使用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為表的字段,想要拼接哪個(gè)字段就拼哪個(gè)字段
有些作者說 CONCAT(venderDesc,purcherdemandOrg,demandOrg,contactInfo,materialDesc) 這樣也能實(shí)現(xiàn),但本人經(jīng)測(cè)試這個(gè)是不行的,會(huì)報(bào)參數(shù)錯(cuò)誤,可能是跟數(shù)據(jù)庫的版本有關(guān)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程中的wait/notify通信模式實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于Java多線程中wait/notify通信模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12activemq整合springboot使用方法(個(gè)人微信小程序用)
這篇文章主要介紹了activemq整合springboot使用(個(gè)人微信小程序用),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為"null"問題
這篇文章主要介紹了java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為“null”問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Springboot使用put、delete請(qǐng)求報(bào)錯(cuò)405的處理
這篇文章主要介紹了Springboot使用put、delete請(qǐng)求報(bào)錯(cuò)405的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07打開.properties中文顯示unicode編碼問題以及解決
這篇文章主要介紹了打開.properties中文顯示unicode編碼問題以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Java視頻格式轉(zhuǎn)化的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Java視頻格式轉(zhuǎn)化的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02JavaWeb簡(jiǎn)單用戶登錄注冊(cè)實(shí)例代碼(有驗(yàn)證碼)
這篇文章主要介紹了JavaWeb簡(jiǎn)單用戶登錄注冊(cè)實(shí)例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析
這篇文章主要介紹了SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringBoot微服務(wù)注冊(cè)分布式Consul的詳細(xì)過程
這篇文章主要介紹了SpringBoot(微服務(wù))注冊(cè)分布式Consul,Spring Boot應(yīng)用可以通過向Consul注冊(cè)自身來實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和治理,使得其他服務(wù)可以在Consul中發(fā)現(xiàn)并調(diào)用它,需要的朋友可以參考下2023-04-04