• springboot 实现递归查询菜单


    1.模型代码

    @TableId(value = "id", type = IdType.AUTO)
        private Integer id;
    
        /**
         * 菜单名称
         */
        private String name;
    
        /**
         * 映射父ID
         */
        private Integer parentId;
    
        @TableField(exist = false)
        private List<MenuInfo> treeList = new ArrayList<>();

    2.service代码

    /**
         * 获取所有权限
         * @return
         */
        public List<MenuInfo> getMenuList(){
            // 用boot获取分类数据   selectAll在springboot中是获取数据表里的所有数据
            List<MenuInfo> data = menuInfoService.list();
            //定义新的list
            List<MenuInfo> menuList = new ArrayList<>();
            //先找到所有的一级分类
            for(MenuInfo menuInfo : data){
                // 一级菜单的parentId是0
                if(menuInfo.getParentId() == 0){
                    menuList.add(menuInfo);
                }
            }
            // 为一级菜单设置子菜单,getChild是递归调用的
            for(MenuInfo parentMenuInfo : menuList){
                parentMenuInfo.setTreeList(getChilde(parentMenuInfo.getId(), data));
            }
            return menuList;
        }
    
        /**
         * 递归查找子菜单
         *
         * @param id 当前菜单id
         * @param rootList 要查找的列表
         * @return
         */
        private List<MenuInfo> getChilde(Integer id, List<MenuInfo> rootList){
            //子级
            List<MenuInfo> childList = new ArrayList<>();
            for(MenuInfo menuInfo : rootList){
                // 遍历所有节点,将父级id与传过来的id比较
                if(menuInfo.getParentId().equals(id)){
                    childList.add(menuInfo);
                }
            }
            // 把子级的子级再循环一遍
            for(MenuInfo sonMenuInfo : childList){
                sonMenuInfo.setTreeList(getChilde(sonMenuInfo.getId(), rootList));
            }
            // 递归退出条件
            if (childList.size() == 0){
                return null;
            }
            return childList;
        }
    
        @RequestMapping("/tset")
        @ResponseBody
        public List<MenuInfo> test(){
            List<MenuInfo> menuList = this.getMenuList();
    
            return menuList;
    
        }
  • 相关阅读:
    Java中使用Lua脚本语言(转)
    lua、groovy嵌入到java中的性能对比(转)
    有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?(转)
    Lua Development Tools (LDT)
    海量数据处理面试题集锦
    三层架构之抽象工厂加反射----实现数据库转换
    八卦一下
    java实现各种数据统计图(柱形图,饼图,折线图)
    activity-alias的使用
    C#反射Assembly 具体说明
  • 原文地址:https://www.cnblogs.com/wjs2019/p/15933235.html
Copyright © 2020-2023  润新知