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