Mybatis多個字段模糊匹配同一個值的案例
需求:
搜索框中可輸入手機號,姓名,地址查詢,后臺需要對一個框中的多個字段做匹配查詢。
搜索
可以在sql語句中做拼接條件查詢:
<if test="condition!=null and condition!=''"> AND CONCAT(r.name,a.name,a.phone,a.addr_detail) LIKE '%' #{condition} '%' </if>
補充知識:在Mybatis xml使用mysql數(shù)據(jù)庫進行多字段模糊查詢(Like)
在mysql中使用Like進行一些簡單輕量級的查詢,并不需要考慮太多效率問題。
一、Like單字段查詢比較簡單。
沒有特殊要求的話,直接使用%關鍵字%就進行左右匹配查詢
..... <mapper..> ... <select...> SELECT c.* FROM contacts c WHERE c.delete_time IS NULL <if test="keyWord != null and keyWord != ''"> AND c.name LIKE concat('%',#{keyWord},'%')} </if> ORDER BY c.create_time DESC <select> </mapper>
那如果我需要查詢多個字段,比如一個輸入框,既可以輸入姓名也可以輸入電話、手機進行查詢,又該如何呢?
二、關于多字段查詢,這里有兩個方式可供參考:
1、對多個字段分別查詢,使用OR連接,這種方式效率在數(shù)據(jù)量大時,效率很差
..... <mapper..> ... <select...> SELECT c.* FROM contacts c WHERE c.delete_time IS NULL <if test="keyWord != null and keyWord != ''"> AND c.name LIKE concat('%',#{keyWord},'%')} OR c.mobile LIKE concat('%',#{keyWord},'%')} OR c.telphone LIKE concat('%',#{keyWord},'%')} </if> ORDER BY c.create_time DESC <select> </mapper>
2、使用concat將多個字段拼接之后在進行模糊查詢,相比第一種更推薦第二種,執(zhí)行效率更好
..... <mapper..> ... <select...> SELECT c.* FROM contacts c WHERE c.delete_time IS NULL <if test="keyWord != null and keyWord != ''"> AND CONCAT(IFNULL(c.name,''),IFNULL(c.mobile,''),IFNULL(c.telephone,'')) LIKE concat('%',#{keyWord},'%')} </if> ORDER BY c.create_time DESC <select> </mapper>
特別提醒:由于CONCAT中只要有一個為NULL,則會返回NULL,這將導致你查不到正確數(shù)據(jù)。為了確保不為NULL,使用 IFNULL判斷下就可以了
IFNULL() 函數(shù)用于判斷第一個表達式是否為 NULL,如果為 NULL 則返回第二個參數(shù)的值,如果不為 NULL 則返回第一個參數(shù)的值。
以上這篇Mybatis多個字段模糊匹配同一個值的案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解IDEA2020新建spring項目和c3p0連接池的創(chuàng)建和使用
C3P0是一個開源的JDBC連接池,它實現(xiàn)了數(shù)據(jù)源和JNDI綁定,本文就使用Spring實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08使用Java接收和處理OpenTelemetry數(shù)據(jù)的完整指南
在現(xiàn)代分布式系統(tǒng)中,OpenTelemetry 成為了一種常見的標準,用于跟蹤和監(jiān)控應用程序的性能和行為,OTLP是 OpenTelemetry 社區(qū)定義的一種數(shù)據(jù)傳輸協(xié)議,文將介紹如何使用 Java 編寫代碼來接收和處理 OTLP 數(shù)據(jù),需要的朋友可以參考下2024-04-04SpringBoot集成Druid配置(yaml版本配置文件)詳解
這篇文章主要介紹了SpringBoot集成Druid配置(yaml版本配置文件),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Java日期時間類(Date、DateFormat、Calendar)解析
這篇文章主要介紹了Java日期時間類(Date、DateFormat、Calendar)解析,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06SpringBoot攔截器實現(xiàn)登錄攔截的方法示例
這篇文章主要介紹了SpringBoot攔截器實現(xiàn)登錄攔截的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09