1. 程式人生 > 其它 >子父級選單查詢

子父級選單查詢

1、表結構資料

2、實體類定義

 1 public class ParentHMClassify {
 2 
 3     private Integer id;
 4 
 5     private String classifyName;
 6 
 7     private Integer parentId;
 8 
 9     private Integer sort;
10     /**
11      * 子集合
12      */
13     List<ParentHMClassify> childList;
14 }

3、查詢方法

 1     @Autowired
2 private HMClassifyMapperCustom classifyMapperCustom; 3 4 @Test 5 public void query() { 6 // 查詢 db 7 List<ParentHMClassify> classifyList1 = classifyMapperCustom.getClassifyList1(); 8 // 存放根節點資訊 9 List<ParentHMClassify> rootList = new ArrayList<>();
10 for (ParentHMClassify parent : classifyList1) { 11 if (parent.getParentId() == 0) { 12 // 新增根節點 13 rootList.add(parent); 14 // 找到根節點下面的子節點選單 15 findChilds(parent, classifyList1); 16 } 17 } 18 System.out.println("result:" + JSONObject.toJSONString(rootList));
19 } 20 21 /** 22 * 遞迴查詢子節點 23 * 24 * @param root 25 * @param list 26 */ 27 public void findChilds(ParentHMClassify root, List<ParentHMClassify> list) { 28 System.out.println("查詢子節點..."); 29 List<ParentHMClassify> childList = new ArrayList<>(); 30 for (ParentHMClassify menu : list) { 31 if (root.getId() == menu.getParentId()) { 32 childList.add(menu); 33 } 34 } 35 // 子節點不存在,就不需要在遍歷子節點中的節點了 直接返回 36 if (childList.size() == 0) return; 37 // 設定父節點的子節點列表 38 root.setChildList(childList); 39 // 若子節點存在,接著遞迴呼叫該方法,查詢子節點的子節點 40 for (ParentHMClassify childs : childList) { 41 findChilds(childs, list); 42 } 43 }

4、子父級選單資料結構為:

  1 [
  2     {
  3         "classifyName":"VIP相關模板",
  4         "id":4,
  5         "parentId":0,
  6         "sort":1
  7     },
  8     {
  9         "childList":[
 10             {
 11                 "childList":[
 12                     {
 13                         "classifyName":"材料遺失宣告模板",
 14                         "id":9,
 15                         "parentId":6,
 16                         "sort":1
 17                     },
 18                     {
 19                         "classifyName":"345345",
 20                         "id":36,
 21                         "parentId":6,
 22                         "sort":2
 23                     }
 24                 ],
 25                 "classifyName":"檔案科",
 26                 "id":6,
 27                 "parentId":5,
 28                 "sort":1
 29             },
 30             {
 31                 "childList":[
 32                     {
 33                         "childList":[
 34                             {
 35                                 "classifyName":"公正委託書模板",
 36                                 "id":13,
 37                                 "parentId":10,
 38                                 "sort":1
 39                             },
 40                             {
 41                                 "classifyName":"交房委託書",
 42                                 "id":14,
 43                                 "parentId":10,
 44                                 "sort":2
 45                             },
 46                             {
 47                                 "classifyName":"未到場補充協議",
 48                                 "id":15,
 49                                 "parentId":10,
 50                                 "sort":3
 51                             },
 52                             {
 53                                 "classifyName":"未到場授權委託書",
 54                                 "id":16,
 55                                 "parentId":10,
 56                                 "sort":4
 57                             }
 58                         ],
 59                         "classifyName":"買賣材料模板",
 60                         "id":10,
 61                         "parentId":7,
 62                         "sort":1
 63                     },
 64                     {
 65                         "classifyName":"租賃材料模板",
 66                         "id":11,
 67                         "parentId":7,
 68                         "sort":2
 69                     }
 70                 ],
 71                 "classifyName":"簽約部",
 72                 "id":7,
 73                 "parentId":5,
 74                 "sort":2
 75             },
 76             {
 77                 "childList":[
 78                     {
 79                         "classifyName":"收入證明模板",
 80                         "id":12,
 81                         "parentId":8,
 82                         "sort":1
 83                     }
 84                 ],
 85                 "classifyName":"貸款部",
 86                 "id":8,
 87                 "parentId":5,
 88                 "sort":3
 89             }
 90         ],
 91         "classifyName":"交易服務中心",
 92         "id":5,
 93         "parentId":0,
 94         "sort":2
 95     },
 96     {
 97         "childList":[
 98             {
 99                 "childList":[
100                     {
101                         "childList":[
102                             {
103                                 "classifyName":"四級選單",
104                                 "id":41,
105                                 "parentId":40,
106                                 "sort":1
107                             }
108                         ],
109                         "classifyName":"三級選單",
110                         "id":40,
111                         "parentId":39,
112                         "sort":2
113                     }
114                 ],
115                 "classifyName":"二級選單",
116                 "id":39,
117                 "parentId":38,
118                 "sort":1
119             },
120             {
121                 "childList":[
122                     {
123                         "childList":[
124                             {
125                                 "classifyName":"四級選單-1",
126                                 "id":44,
127                                 "parentId":43,
128                                 "sort":1
129                             }
130                         ],
131                         "classifyName":"三級選單-1",
132                         "id":43,
133                         "parentId":42,
134                         "sort":1
135                     }
136                 ],
137                 "classifyName":"二級選單-1",
138                 "id":42,
139                 "parentId":38,
140                 "sort":2
141             }
142         ],
143         "classifyName":"一級選單",
144         "id":38,
145         "parentId":0,
146         "sort":3
147     }
148 ]

5、總結

先查詢所有選單集合資料,然後遍歷選單集合獲取根節點集合,然後呼叫查詢子節點方法並在子節點方法中進行遞迴查詢。如果當前節點沒有子節點,直接return 不需要在進行遞迴查詢。相反如果當前節點有子節點則一直進行遞迴查詢。