摘要:那么查詢結(jié)果應(yīng)該為張三服裝茶具李四服裝服裝此處需要注意一點,的元素調(diào)用方法時,自動映射的屬性名和列名應(yīng)該保持一致,或者列表必須是數(shù)據(jù)庫表中的字段名,而不是別名。
合并多行查詢的結(jié)果 業(yè)務(wù)需求
商家可以根據(jù)商品類目分類,每位商家可以有多個商品類目,商品類目又跟運營類目有一種關(guān)聯(lián)規(guī)則。此處暫且不說運營類目。根據(jù)業(yè)務(wù),商家信息是一張表,商家與商品類目有一張關(guān)聯(lián)表,商品類目有一張表,權(quán)且使用三張表。
其他不相干字段不展示
商家表(user)
uid | username | mobile |
---|---|---|
1 | 張三 | 12345678901 |
2 | 李四 | 12345600002 |
商品類目表(item_category)
icid | name | status | parentid |
---|---|---|---|
1 | 服裝 | 0 | 0 |
2 | 茶具 | 0 | 0 |
3 | 食品 | 0 | 0 |
商家與商品類目(user_item_cate_rel)
uid | icid |
---|---|
1 | 1 |
1 | 2 |
2 | 1 |
2 | 3 |
如果我們需要在前端頁面展示每個商家的商品類目,那么我們返回的結(jié)果中就需要每條商家數(shù)據(jù)中包含所屬商品的類目。實現(xiàn)方式有很多種:1.一條sql語句可以實現(xiàn),使用group_concat函數(shù)并根據(jù)uid分組;2.先查詢商家信息,再根據(jù)商家uid查詢user_item_cate_rel和item_category表,再將結(jié)果在model中組合;3.用mybatis的resultMap。此處只看1和3的實現(xiàn)方式。
展示需求:
# | 商家ID | 商家名 | 手機號碼 | 商品類目 | 操作 |
---|---|---|---|---|---|
1 | 1 | 張三 | 12345678901 | 服裝,茶具 | 刪除 修改 |
2 | 2 | 李四 | 12345600002 | 服裝,食品 | 刪除 修改 |
SELECT u.*,group_concat(ic.name) categories FROM user LEFT JOIN user_item_cate_rel uicr ON u.uid = uicr.uid LEFT JOIN item_category ic ON uicr.icid = ic.icid WHERE ... # 查詢條件 GROUP BY u.uid
大概就這樣,可以把類目直接返回給前端,毫無疑問,這個實現(xiàn)是最快的。但是,當(dāng)數(shù)據(jù)量大的時候,并且是查詢列表的時候,全表掃描,就會出現(xiàn)慢查詢。
巧妙使用Mybatis resultMap創(chuàng)建User和Category POJO。User除了user表的字段作為屬性外,外加一個private List
mapper的xml中:
先定義一個id為user的resultMap:
實現(xiàn)select屬性對應(yīng)方法:此處select的id為上面id為user的resultMap中collection的select元素,參數(shù)#{uid}為column元素指定的字段。
獲取指定條數(shù)的數(shù)據(jù):mybatis可以根據(jù)傳入的參數(shù)組裝sql語句。
上面查詢中,UserSearch是查詢條件POJO,可以根據(jù)需要自定義過濾那些字段。其中有一個屬性是icid,就是根據(jù)傳入的一個商品類目查詢商家信息。比如,要查詢icid=1的商家,那么我們返回的數(shù)據(jù)不僅僅是icid=1的,還應(yīng)該是icid=1商家的其他icid信息。
那么查詢結(jié)果應(yīng)該為:
[ { "uid": 1, "username": "張三", "mobile": "12345678901", "categories": [ { "icid": 1, "name": "服裝" }, { "icid": 2, "name": "茶具" } ] }, { "uid": 2, "username": "李四", "mobile": "12345600002", "categories": [ { "icid": 1, "name": "服裝" }, { "icid": 3, "name": "服裝" } ] } ]
○ 此處需要注意一點,resultMap的select元素調(diào)用getCategory方法時,自動映射的屬性名和列名應(yīng)該保持一致,或者列表必須是數(shù)據(jù)庫表中的字段名,而不是別名。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66699.html
摘要:這是一個長期更新的文章,歡迎大家補充的奇技淫巧個人建議一些奇技淫巧使得代碼可讀性較差,不建議使用兩行寫一個評分組件錯誤處理的正確姿勢另外一種等價于論如何優(yōu)雅的取整論如何優(yōu)雅的交換數(shù)值用最短的代碼實現(xiàn)數(shù)組去重 這是一個長期更新的文章,歡迎大家補充 JavaScript 的奇技淫巧 個人建議:一些奇技淫巧使得代碼可讀性較差,不建議使用 1. 兩行寫一個評分組件 let rate = 2 ★...
摘要:的自帶函數(shù)提供了一個非常有趣的特性,可以將給一個字符串當(dāng)做一個表達式去執(zhí)行。例如這種服務(wù)器自助運維的運維任務(wù)中的定義和判斷 Python的自帶函數(shù) eval 提供了一個非常有趣的特性,可以將給一個字符串當(dāng)做一個表達式去執(zhí)行。先上一個例子: cond = compile(succ_rate
摘要:根據(jù)虛擬的算法,只要改變節(jié)點的類型就能促使在的時候重新創(chuàng)建虛擬。不過這個效果依賴于虛擬算法。如果使用時候出現(xiàn)什么副作用,鄙人概不負責(zé)。此技巧在寫文章時正處于的版本 我們知道 React 的標(biāo)準(zhǔn)模式是單向數(shù)據(jù)流,而其表單項通常需要監(jiān)聽 onChange 事件,然后通過改變外部的 value 來回寫表單項的 value,譬如如下 input class App extends React....
摘要:比如經(jīng)常逛知乎可以看到不少妹子自拍,比如這個問題打開控制臺執(zhí)行這個或者就可以將所有圖片地址復(fù)制好了。另外關(guān)于知乎還有個隱藏技能,按可以打開快捷鍵幫助,不用鼠標(biāo)也可以玩知乎了,微博也有這功能。平常工作少不了用瀏覽器,以下分享一些瀏覽器的使用技巧,更好的有助于你的工作。 ps: 以下技巧均在 Chrome 瀏覽器下測試的。 網(wǎng)頁長截圖 按 F12 彈出控制臺,按 ctrl+shift+p 彈出...
閱讀 635·2021-11-22 15:32
閱讀 2723·2021-11-19 09:40
閱讀 2318·2021-11-17 09:33
閱讀 1274·2021-11-15 11:36
閱讀 1870·2021-10-11 10:59
閱讀 1482·2019-08-29 16:41
閱讀 1785·2019-08-29 13:45
閱讀 2155·2019-08-26 13:36