<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
不知道大家在開發中有沒有這樣的經歷:根據條件過濾列表資料項。
這種的條件少的還好,比如根據姓名或者性別過濾,這樣不僅頁面會稍微美觀一些,對於sql的壓力以及後端的程式碼量也是會輕鬆不少的。
但是條件多了,條件1,條件2,條件3…條件100,這時候後端的介面就會一個一個的if判斷,不斷的追加條件(做為後端開發深有體會,頭大)
我給大家簡單畫個圖,大家就明白了:
那麼有沒有一種方式,可以又美化頁面,不增加使用者的視覺疲勞,又能做到只輸入一個關鍵字,就能將全部的資料按照輸入的關鍵字進行過濾,從而只留下符合關鍵字資訊的呢。
當然有,今天在做自己專案的時候就遇到了這個問題,正好藉著這個機會分享我的思路以及相關的程式碼。
關於頁面佈局,正如上述,我只需要留下一個輸入框,用來過濾列表資料:
那sql就不能無腦使用xxx like xxx and xxx like xxx 這種格式了。
告訴大家一個小技巧,msql的模糊查詢是可以配合concat函數一起使用的。
具體sql格式為:
select a,b,c from table concat(a,b,c) like oncat('%',x,'%')
這樣就可以實現,根據x這個值對a,b,c這三個欄位進行過濾了。
下面是一個實戰的sql:
select id, sex, user_name,nick_name,birthday,image,account,password,phone,address,create_time,update_time,is_delete,status from t_user where concat(user_name,nick_name,birthday,account,phone,address,remark) like concat('%','雪','%')order by id desc
備註:查詢出的欄位和concat的欄位不一定非要是完全匹配的
比如你可以直接查詢a,b,c,d,e 但是隻concat(a,e)也是可以的,不需要像union all那麼嚴格
有個這個思路,程式碼就簡單了,相關程式碼如下:
controller
@GetMapping(value = "/queryList") public Result queryList(String keyWord) { // 根據關鍵字模糊查詢展示列表資料 return Result.ok(userService.queryUserInfo(keyWord)); }
service/impl
List<User> queryUserInfo(String keyWord); public List<User> queryUserInfo(String keyWord) { return userMapper.queryUserInfo(keyWord); }
mapper/xml
List<User> queryUserInfo(@Param("keyWord") String keyWord); <select id="queryUserInfo" resultType="com.wyh.entity.User"> select id, sex, user_name, nick_name, birthday, image, account, password, phone, address, remark, create_time, update_time, is_delete, status from t_user <where> is_delete = 0 <if test="keyWord !=null and keyWord !=''"> and concat(id,sex,user_name,nick_name,birthday,image,account, password,phone, address, remark, create_time,update_time,is_delete,status) like concat( '%',#{keyWord},'%') </if> </where> order by id desc </select>
這時候介面就寫完了,可以自己簡單測試下:
有引數
無參
介面寫完了,直接呼叫即可。
由於我前端程式碼較多,大多數是和這個業務無關的程式碼,所以下面只貼上關鍵程式碼,程式碼格式可能不太多,自行調整即可
<el-input v-model="keyWord" placeholder="請輸入關鍵字" clearable class="keyWordText"></el-input> <el-button type="primary" icon="el-icon-search" @click="queryUserList">搜尋</el-button> data() { return { keyWord:'', // 輸入框關鍵字 userTableData: [], // 使用者列表 }, // 展示使用者列表 methods: { queryUserList() { axios.get('http://localhost:9090/user/queryList', { // 傳遞的引數 params: { keyWord:this.keyWord } // 回撥函數,一定要使用箭頭函數,不然this的指向不是vue範例 }).then(res =>{ // 請求成功後的資料返回給使用者列表用於展示 this.userTableData = res.data.data; }).catch(error =>{ console.log(error) }) } } mounted() { // 頁面載入就渲染使用者列表 this.queryUserList(); },
既然程式碼都寫完了,那就試試看吧,下面為幾個測試截圖:
坑:
經過測試有一個坑,那就是如果concat中的欄位值有空的,可能導致查詢不到該資料,就會造成一個假象,明明資料和sql是對的,就是查不出來。
例如:
關於解決方案,目前的只想到一種,就是把資料填滿,儘量不要有空。
感覺這個方案不完善,如果你有好的主意,歡迎評論告訴我
其實用起來還是挺方便簡單的,實際開發中還是要聽從產品或者專案總監的為好。
到此這篇關於Msql使用concat函數實現關鍵字模糊查詢(列表資料過濾-附前後端程式碼)的文章就介紹到這了,更多相關Msql concat函數模糊查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45