java实现递归菜单树

  

本文实例为大家分享了java实现递归菜单树的具体代码,供大家参考,具体内容如下

  

1。表结构

        设置FOREIGN_KEY_CHECKS=0;      -- ----------------------------   ——菜单表结构   -- ----------------------------   删除表如果存在“菜单”;   创建表“菜单”(   “id”int(11)不是零AUTO_INCREMENT,   ‘menu_name varchar (64) NOT NULL评论“菜单名称”,   order_num int(11)默认空评论“菜单顺序”,   “url”varchar(64)默认空评论“菜单路径”,   “pid”varchar(11)默认空评论”上级Id”,   “图标”varchar(255)默认空评论“菜单图标”,   主键(“id”)   )引擎=InnoDB AUTO_INCREMENT=11默认字符集=utf8;      -- ----------------------------   ——记录菜单   -- ----------------------------   插入“菜单”值(' 1 ','系统管理',' 1 ',”,“0”,空);   插入“菜单”值(' 2 ','轨迹查询”,“2”,“‘0’,null);   插入“菜单”值(“3”、“设备信息”,“3”,“‘0’,null);   插入“菜单”值(“4”,“用户信息’,‘1’,”,“1”,空);   插入”菜单的值(“5”,“客户信息”,“2”,null, ' 1 ', null);   插入”菜单的值(“6”,“用户资料”,“1”,null,‘4’, null);   插入”菜单的值(“7”,“客户资料”,“1”,空,“5”,null);   插入“菜单”值(“8”,“切割机',' 1 ',null, ' 3 ', null);   插入”菜单的值(“9”,“铲车”,“2”,null, ' 3 ', null);   插入“菜单”值(“10”、“割片’,‘1’,null,“8”, null);      

2。菜单实体类

        进口lombok.Data;   进口java.io.Serializable;   进口并不知道;   进口javax.persistence。*;/* *   *   * @author m   * @qq.com 123456789   * @date 2019-12-13 16:54:59   */@ data   @ table (name="菜单")   公共类菜单实现Serializable {   私有静态最终长serialVersionUID l=1;//@ id   私人整数id;//菜单名称   @ column (name=" menu_name ")   私人字符串menuName;//菜单顺序   @ column (name=" order_num ")   私人整数orderNum;//菜单路径   @ column (name=" url ")   私人字符串url;//上级Id   @ column (name=皃id”)   私人pid字符串;//菜单图标   @ column (name=巴急辍?   私人字符串图标;//子菜单   @Transient   私人List孩子;         }      

3。菜单树

     /* *   *获取菜单树   * @return   */公共ListmenuTree () {//查询所有菜单   List菜单=mapper.selectAll ();//返回的菜单树   List,rootMenus=new ArrayList<的在();   (菜单菜单:菜单){//pid(上级Id)为0的是根菜单   如果(“0”.equals (menu.getPid ())) {   rootMenus.add(菜单);   }   }//遍历,找到二级菜单(根菜单的id和所有菜单中的pid比较)   (菜单rootMenu: rootMenus) {   List孩子=getChild (String.valueOf (rootMenu.getId()),菜单);   rootMenu.setChildren(孩子);   }   返回rootMenus;   }/* *   *递归获取下级菜单   * @param pid上级Id   * @param菜单所有菜单   * @return   */公共ListgetChild(字符串pid, List菜单){//子菜单列表   List,childList=new ArrayList<的在();   (菜单菜单:菜单){   如果(pid.equals (menu.getPid ())) {   childList.add(菜单);   }   }//遍历获取子菜单的子菜单   (菜单菜单:childList) {   List孩子=getChild (String.valueOf (menu.getId()),菜单);   menu.setChildren(孩子);   }//递归出口childList长度为0   如果(childList.size ()==0) {   返回新ArrayList<在();   }   返回childList;   }      

4。测试

        {   “状态”:200年,   “消息”:“操作成功”,   “数据”:(   {   “id”: 1、   :“menuName系统管理”,   “orderNum”: 1、   " url ": " ",   “pid”:“0”,   “图标”:空,   “孩子”:(   {   “id”: 4   “menuName”:“用户信息”,   “orderNum”: 1、   " url ": " ",   “pid”:“1”,   “图标”:空,   “孩子”:(   {   “id”: 6,   “menuName”:“用户资料”,   “orderNum”: 1、   “url”:空,   “pid”:“4”,   “图标”:空,   “孩子”:[]   }   ]   },   {   “id”: 5   :“menuName客户信息”,   “orderNum”: 2   “url”:空,   “pid”:“1”,   “图标”:空,   “孩子”:(   {   “id”: 7,   :“menuName客户资料”,   “orderNum”: 1、   “url”:空,   “pid”:“5”,   “图标”:空,   “孩子”:[]   }   ]   }   ]   },   {   “id”: 2   :“menuName轨迹查询”,   “orderNum”: 2   " url ": " ",   “pid”:“0”,   “图标”:空,   “孩子”:[]   },   {   “id”: 3,   :“menuName设备信息”,   “orderNum”: 3,   " url ": " ",   “pid”:“0”,   “图标”:空,   “孩子”:(   {   “id”: 8   “menuName”:“切割机”,   “orderNum”: 1、   “url”:空,   “pid”:“3”,   “图标”:空,   “孩子”:(   {   “id”: 10   “menuName”:“割片”,   “orderNum”: 1、   “url”:空,   “pid”:“8”,   “图标”:空,   “孩子”:[]   }   ]   },   {   “id”: 9,   :“menuName铲车”,   “orderNum”: 2   “url”:空,   “pid”:“3”,   “图标”:空,   “孩子”:[]   }   ]   }   ]   }

java实现递归菜单树