mybatis使用的奇技淫巧

2021-09-17 02:15:49 字數 2161 閱讀 6822

商家可以根據商品類目分類,每位商家可以有多個商品類目,商品類目又跟運營類目有一種關聯規則。此處暫且不說運營類目。根據業務,商家資訊是一張表,商家與商品類目有一張關聯表,商品類目有一張表,權且使用三張表。

其他不相干欄位不展示

uid

username

mobile1張三

123456789012李四

12345600002

icid

name

status

parentid1服裝

002茶具

003食品

00uid

icid11

1221

23如果我們需要在前端頁面展示每個商家的商品類目,那麼我們返回的結果中就需要每條商家資料中包含所屬商品的類目。實現方式有很多種:1.一條sql語句可以實現,使用group_concat函式並根據uid分組2.先查詢商家資訊,再根據商家uid查詢user_item_cate_rel和item_category表,再將結果在model中組合3.用mybatis的resultmap。此處只看1和3的實現方式。

#商家id

商家名手機號碼

商品類目操作1

1張三12345678901

服裝,茶具

刪除修改22

李四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

大概就這樣,可以把類目直接返回給前端,毫無疑問,這個實現是最快的。但是,當資料量大的時候,並且是查詢列表的時候,全表掃瞄,就會出現慢查詢。

建立user和category pojo。user除了user表的字段作為屬性外,外加乙個private listcategories屬性。category的字段分別為:icidname

select uicr.icid,ic.name from user_item_cate_rel uicr

left join item_category ic

on uicr.icid = ic.icid

where uicr.uid = #

select u.* from user u left join user_item_cate_rel uicr 

on u.uid = uicr.uid

where 1=1

and u.uid = #

and u.username like concat('%',#, '%')

and u.mobile = #

and uicr.icid = #

..... // 各種查詢條件

limit #,#

上面查詢中,usersearch是查詢條件pojo,可以根據需要自定義過濾那些字段。其中有乙個屬性是icid,就是根據傳入的乙個商品類目查詢商家資訊。比如,要查詢icid=1的商家,那麼我們返回的資料不僅僅是icid=1的,還應該是icid=1商家的其他icid資訊。

那麼查詢結果應該為:

[,]

},,]}

]

此處需要注意一點,resultmap的select元素呼叫getcategory方法時,自動對映的屬性名和列名應該保持一致,或者列表必須是資料庫表中的欄位名,而不是別名。

git 奇技淫巧

例如 1.0.0 git tag a 1.0.0 m 1.0.0 版本的備註資訊.複製 git push origin tags 複製 例如 1.0.0 git tag d 1.0.0 複製 刪除遠端標籤需要先刪除本地標籤,再執行下面的命令 git push origin refs tags 1.0...

c 的奇技淫巧

關於陣列 數論演算法技巧 stl其他 while scanf d d n,m eof 等價於 while scanf d d n,m 2 前者eof為檔案結束符,較保險 後者 後的數字為輸入的變數的個數 不能只寫while scanf d d n,m 這樣無法結束讀入 wwq大佬教的,希望我不要和他...

Git的奇技淫巧

git常用命令集合,fork於tips專案 git是乙個 分布式版本管理工具 簡單的理解版本管理工具 大家在寫東西的時候都用過 回撤 這個功能,但是回撤只能回撤幾步,假如想要找回我三天之前的修改,光用 回撤 是找不回來的。而 版本管理工具 能記錄每次的修改,只要提交到版本倉庫,你就可以找到之前任何時...