最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)遞歸菜單樹

 更新時(shí)間:2020年08月26日 09:16:53   作者:男人要霸氣  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)遞歸菜單樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)遞歸菜單樹的具體代碼,供大家參考,具體內(nèi)容如下

1.表結(jié)構(gòu)

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for menu
-- ----------------------------
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `menu_name` varchar(64) NOT NULL COMMENT '菜單名稱',
 `order_num` int(11) DEFAULT NULL COMMENT '菜單順序',
 `url` varchar(64) DEFAULT NULL COMMENT '菜單路徑',
 `pid` varchar(11) DEFAULT NULL COMMENT '上級(jí)Id',
 `icon` varchar(255) DEFAULT NULL COMMENT '菜單圖標(biāo)',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of menu
-- ----------------------------
INSERT INTO `menu` VALUES ('1', '系統(tǒng)管理', '1', '', '0', null);
INSERT INTO `menu` VALUES ('2', '軌跡查詢', '2', '', '0', null);
INSERT INTO `menu` VALUES ('3', '設(shè)備信息', '3', '', '0', null);
INSERT INTO `menu` VALUES ('4', '用戶信息', '1', '', '1', null);
INSERT INTO `menu` VALUES ('5', '客戶信息', '2', null, '1', null);
INSERT INTO `menu` VALUES ('6', '用戶資料', '1', null, '4', null);
INSERT INTO `menu` VALUES ('7', '客戶資料', '1', null, '5', null);
INSERT INTO `menu` VALUES ('8', '切割機(jī)', '1', null, '3', null);
INSERT INTO `menu` VALUES ('9', '鏟車', '2', null, '3', null);
INSERT INTO `menu` VALUES ('10', '割片', '1', null, '8', null);

2.菜單實(shí)體類

import lombok.Data;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;


/**
 *
 * @author m
 * @email 123456789@qq.com
 * @date 2019-12-13 16:54:59
 */
@Data
@Table(name = "menu")
public class Menu implements Serializable {
 private static final long serialVersionUID = 1L;
 
 //
 @Id
 private Integer id;
 
 //菜單名稱
 @Column(name = "menu_name")
 private String menuName;
 
 //菜單順序
 @Column(name = "order_num")
 private Integer orderNum;
 
 //菜單路徑
 @Column(name = "url")
 private String url;
 
 //上級(jí)Id
 @Column(name = "pid")
 private String pid;
 
 //菜單圖標(biāo)
 @Column(name = "icon")
 private String icon;

 //子菜單
 @Transient
 private List<Menu> children;


}

3.菜單樹

 /**
  * 獲取菜單樹
  * @return
  */
 public List<Menu> menuTree() {
  //查詢所有菜單
  List<Menu> menus = mapper.selectAll();
  //返回的菜單樹
  List<Menu> rootMenus = new ArrayList<>();
  for (Menu menu : menus) {
   //pid(上級(jí)Id)為0的是根菜單
   if ("0".equals(menu.getPid())) {
    rootMenus.add(menu);
   }
  }
  //遍歷,找到二級(jí)菜單(根菜單的id和所有菜單中的pid比較)
  for (Menu rootMenu : rootMenus) {
   List<Menu> child = getChild(String.valueOf(rootMenu.getId()), menus);
   rootMenu.setChildren(child);
  }
  return rootMenus;
 }


 /**
  * 遞歸獲取下級(jí)菜單
  * @param pid 上級(jí)Id
  * @param menus 所有菜單
  * @return
  */
 public List<Menu> getChild(String pid, List<Menu> menus) {
  //子菜單列表
  List<Menu> childList = new ArrayList<>();
  for (Menu menu : menus) {
   if (pid.equals(menu.getPid())) {
    childList.add(menu);
   }
  }
  //遍歷 獲取子菜單的子菜單
  for (Menu menu : childList) {
   List<Menu> child = getChild(String.valueOf(menu.getId()), menus);
   menu.setChildren(child);
  }
  //遞歸出口 childList長度為0
  if (childList.size() == 0) {
   return new ArrayList<>();
  }
  return childList;
 }

4.測試

{
 "status": 200,
 "message": "操作成功",
 "data": [
  {
   "id": 1,
   "menuName": "系統(tǒng)管理",
   "orderNum": 1,
   "url": "",
   "pid": "0",
   "icon": null,
   "children": [
    {
     "id": 4,
     "menuName": "用戶信息",
     "orderNum": 1,
     "url": "",
     "pid": "1",
     "icon": null,
     "children": [
      {
       "id": 6,
       "menuName": "用戶資料",
       "orderNum": 1,
       "url": null,
       "pid": "4",
       "icon": null,
       "children": []
      }
     ]
    },
    {
     "id": 5,
     "menuName": "客戶信息",
     "orderNum": 2,
     "url": null,
     "pid": "1",
     "icon": null,
     "children": [
      {
       "id": 7,
       "menuName": "客戶資料",
       "orderNum": 1,
       "url": null,
       "pid": "5",
       "icon": null,
       "children": []
      }
     ]
    }
   ]
  },
  {
   "id": 2,
   "menuName": "軌跡查詢",
   "orderNum": 2,
   "url": "",
   "pid": "0",
   "icon": null,
   "children": []
  },
  {
   "id": 3,
   "menuName": "設(shè)備信息",
   "orderNum": 3,
   "url": "",
   "pid": "0",
   "icon": null,
   "children": [
    {
     "id": 8,
     "menuName": "切割機(jī)",
     "orderNum": 1,
     "url": null,
     "pid": "3",
     "icon": null,
     "children": [
      {
       "id": 10,
       "menuName": "割片",
       "orderNum": 1,
       "url": null,
       "pid": "8",
       "icon": null,
       "children": []
      }
     ]
    },
    {
     "id": 9,
     "menuName": "鏟車",
     "orderNum": 2,
     "url": null,
     "pid": "3",
     "icon": null,
     "children": []
    }
   ]
  }
 ]
}

5.菜單樹工具類

菜單樹工具類

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot工程下Lombok的應(yīng)用教程詳解

    SpringBoot工程下Lombok的應(yīng)用教程詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot工程下Lombok應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式

    mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式

    這篇文章主要介紹了mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • selenium操作隱藏的元素(python+Java)

    selenium操作隱藏的元素(python+Java)

    這篇文章主要介紹了selenium操作隱藏的元素(python+Java),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫

    springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫

    這篇文章主要介紹了springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    這篇文章主要介紹了Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java中字符串替換的四種方法舉例總結(jié)

    Java中字符串替換的四種方法舉例總結(jié)

    Java提供了多種方法來替換字符串,其中最常用的是使用replace()方法和正則表達(dá)式,下面這篇文章主要給大家介紹了關(guān)于Java中字符串替換的四種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)

    java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)

    下面小編就為大家?guī)硪黄猨ava中將一個(gè)List等分成n個(gè)list的工具方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明

    JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明

    這篇文章主要介紹了JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java:DocumentBuilderFactory調(diào)用XML的方法實(shí)例

    Java:DocumentBuilderFactory調(diào)用XML的方法實(shí)例

    Java:DocumentBuilderFactory調(diào)用XML的方法實(shí)例,需要的朋友可以參考一下
    2013-04-04
  • Java并發(fā)編程之顯示鎖ReentrantLock和ReadWriteLock讀寫鎖

    Java并發(fā)編程之顯示鎖ReentrantLock和ReadWriteLock讀寫鎖

    這篇文章主要介紹了Java并發(fā)編程之顯示鎖ReentrantLock和ReadWriteLock讀寫鎖,本文講解了ReentrantLock概況、Lock接口、Lock使用、輪詢鎖的和定時(shí)鎖、公平性、可中斷獲鎖獲取操作等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

安丘市| 荥经县| 东明县| 喀喇沁旗| 靖安县| 潍坊市| 汤阴县| 德安县| 奈曼旗| 平利县| 含山县| 宜良县| 曲沃县| 新巴尔虎右旗| 浪卡子县| 彰化县| 农安县| 什邡市| 苗栗市| 秦安县| 台东市| 百色市| 绵阳市| 舞阳县| 巴彦县| 绥化市| 绥中县| 辉南县| 贡觉县| 河南省| 海淀区| 五大连池市| 滨州市| 北辰区| 根河市| 上思县| 垣曲县| 海口市| 泉州市| 黎平县| 汾阳市|