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

第一種 or

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

<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),即便另外一箇中包含查詢的數據,也查詢不到數據。mysql

兩種解決方法:sql

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測試接口的時候 把前面模糊查詢有點影響 查出來的數據感受有點亂post

第二種 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) 其中字段若是是關鍵字是要用」`」來引發來的,否則會報錯!測試

暫時在用第二種spa

第三種 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()能夠添加分割符參數。

 

相關文章
相關標籤/搜索