Mybatis mysql 一個搜索框多個字段模糊查詢 幾種方法


第一種 or

根據搜索框給定的關鍵詞,模糊搜索用戶名和賬號都匹配的用戶集合

<select id="list" parameterType="com.user.UserInfo" resultType="com.user.UserInfo">
        SELECT
            *
        FROM
            user
        WHERE
            1 = 1
            <if test="searchParam != null and searchParam != ''">
                AND CONCAT(user_name, user_account) LIKE CONCAT('%',#{searchParam},'%')
            </if>
 </select>

但是以上查詢中,如果user_name 或者 user_account 中任意一個屬性的所有數據為null時(比如account字段的所有值均未賦值,默認值為null),即使另一個中包含查詢的數據,也查詢不到數據。

兩種解決方法:

1.給可能為null的查詢字段設置默認值,空字符串或者其他;

2.改用or連接多個模糊查詢

AND CONCAT(user_name, user_account) LIKE CONCAT('%',#{searchParam},'%')
 
改為
 
AND user_name like CONCAT('%',#{searchParam},'%')
or user_account like CONCAT('%',#{searchParam},'%')

   and station_name like CONCAT('%',#{queryRecordVO.stationName},'%')
   or user_number like CONCAT('%',#{queryRecordVO.stationName},'%')

 

 感覺用or的話 用postman測試接口的時候 把前面模糊查詢有點影響 查出來的數據感覺有點亂

第二種 CONCAT(VALUE_CODENAME)

<select id="list" parameterType="ParamConfigCondition" resultType="ParamConfig">
        SELECT
            a.PARAM_CODE,
            a.VALUE_CODE,
            a.`NAME`,
            a.IS_READ_ONLY,
            a.DESCR
        FROM
            TPT_PARAM_CONFIG a
        WHERE
            1 = 1
            <if test="paramCode != null and paramCode != ''">
                AND a.PARAM_CODE = #{paramCode}
            </if>
            <if test="searchParam != null and searchParam != ''">
                AND CONCAT(`VALUE_CODE`, `NAME`) LIKE CONCAT('%',#{searchParam},'%')
            </if>
    </select>

注:CONCAT(VALUE_CODENAME) 其中字段如果是關鍵字是要用”`”來引起來的,不然會報錯!

暫時在用第二種

第三種 concat_ws(...)

百度方法 https://jingyan.baidu.com/article/11c17a2c6da078f446e39daa.html

mysql可以對數據庫多個字段同時進行模糊查詢,例如:數據庫設計中把姓名設計為兩個字段,一個字段為姓LASTNAME,一個字段為名字FIRSTNAME。當界面進行模糊搜索時,mysql中有concat(...),concat_ws(...)兩個函數。

例子如下:

SELCET * FROM T-USER U WHERE CONCAT(U.LASTNAME,U.FIRSTNAME) LIKE '%$LSP_NAME$%'

LASTNAME 字段是姓

FIRSTNAME字段是名字

 

 當查詢字段為null時,返回結果為null。與concat_ws(...)不同。

 

 

如果為多個字段同時進行查詢時,使用concat_ws(...).

select concat_ws(',','11','22','33');

select concat_ws(',','11','22','33',null);

都返回11,22,33

 

 

CONCAT_WS() 代表 CONCAT With Separator,是CONCAT()的特殊形式。第一個參數是其它參數的分隔符。分隔符的位置放在要連接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數。

 

 

 CONCAT()可以連接一個或者多個字符串,CONCAT_WS()可以添加分割符參數。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM