• java树形菜单实现


    java树形菜单实现

    一:两张表 实现:

    1:公司表:

    2:部门表:

     实体类:

    public class Node {
        private Integer companyId;//公司id
        private String companyName;//公司名字
        private Integer departId;//部门id
        private String parentId;
        private String departName;//部门名字
        private List<Node> children; //父节点的子类
    
       get/set.............
    }

    树形节点工具类:

    package com.dengwei.day01springboot.utils;
    
    import com.dengwei.day01springboot.model.Node;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Author
     * @ClassName TreeUtile
     * @Description TODO
     * @Date 2018/10/30 0030 下午 11:29
     * @Version 1.0
     */
    public class TreeUtile {
    /**
     * @Author 
     * @Description //TODO 
     * @Date 2018/10/31 0031 上午 12:02
     * @Param nodes :所有的节点列表
     * @return
     */
        public List data(List<Node> nodes) {
            ArrayList<Node> rootNode = new ArrayList<>();
                 for(Node node:nodes){
                      if(node.getParentId().equals("0")){
                            rootNode.add(node);
                      }
                 }
                 for(Node node:rootNode){
                     List<Node> child = getChild(String.valueOf(node.getDepartId()), nodes);
                     node.setChildren(child);
                 }
                 return rootNode;
        }
    
    
        /**
         * @return
         * @Author
         * @Description //TODO 获取根节点的子节点
         * @Date 2018/10/30 0030 下午 11:37
         * @Param
         */
        public List<Node> getChild(String id, List<Node> allNode) {
            //存放子菜单的集合
            ArrayList<Node> listChild = new ArrayList<>();
            for (Node node : allNode) {
                if (node.getParentId().equals(id)) {
                    listChild.add(node);
                }
            }
            //递归:
            for (Node node : listChild) {
                node.setChildren(getChild(String.valueOf(node.getDepartId()), allNode));
            }
            if (listChild.size() == 0) {
                return null;
            }
            return listChild;
        }
    }

     controller使用:

     dao:

     

     mapper:

    一张表的递归:

    表数据:

                                

    实体类:

    @Data
    public class BusinessServiceTreeDto {
        
        //
        private Integer value;
        //显示值
        private String label;
        //当前实体类的集合
        private List<BusinessServiceTreeDto> children;
    }

    mapper层:

    /**
         * 根据id查询出服务类型
         * @author      hhh
         * @date        2019/5/23 11:53
         */
        List<Business> selectBusiness(Integer id);

    mapper.xml:

    <select id="selectBusiness" resultMap="BaseResultMap" parameterType="integer">
            SELECT * FROM base_business WHERE pid=#{id} and delFlag=0
        </select>

    service层

     /**
         * 服务类别的树形数据查询
         * @author      hhh
         * @date        2019/5/23 15:33
         */
        @Override
        public List<BusinessServiceTreeDto> selectServiceClass(Integer id) {
            //那到id作为条件进行查询  查出他pid为0的集合
            List<Business> serviceCalsses = businessMapper.selectBusiness(id);
            List<BusinessServiceTreeDto> list=new ArrayList<>();
            //遍历它往封装类添加值
            for (Business serviceCalss : serviceCalsses) {
                BusinessServiceTreeDto serviceClassDto=new BusinessServiceTreeDto();
                serviceClassDto.setValue(serviceCalss.getId());
                serviceClassDto.setLabel(serviceCalss.getName());
                //调用selectServiceClassChildren方法进行添加值
                serviceClassDto.setChildren(selectServiceClassChildren(serviceCalss.getId()));
                list.add(serviceClassDto);
            }
            return list;
        }
     
     
    /**
         * 根据传过来的id进行查询 得到他下面的子集
         * @author      hhh
         * @date        2019/5/23 15:01
         */
        public List<BusinessServiceTreeDto> selectServiceClassChildren(Integer id){
            //根据他传过来的id作为查询
            List<Business> serviceClasses = businessMapper.selectBusiness(id);
            //如果这个集合的数据大小为0那么就退出当前方法
            if(serviceClasses.size()==0){
                return null;
            }
            List<BusinessServiceTreeDto> list=new ArrayList<>();
            //查询出来的结果大小大于0进行循环递归
            for (Business serviceClass : serviceClasses) {
                BusinessServiceTreeDto serviceClassDto=new BusinessServiceTreeDto();
                serviceClassDto.setValue(serviceClass.getId());
                serviceClassDto.setLabel(serviceClass.getName());
                //递归调用当前的pid作为条件
                serviceClassDto.setChildren(selectServiceClassChildren(serviceClass.getId()));
                list.add(serviceClassDto);
            }
            return list;
        }
     
     
  • 相关阅读:
    stat(),lstat(),fstat() 获取文件/目录的相关信息
    lseek() 定位一个已经打开的文件
    Android 自定义View修炼-仿360手机卫士波浪球进度的实现
    Android 自定义View修炼-仿QQ5.0 的侧滑菜单效果的实现
    小蔡计算器 V4.0新版全新发布上线啦~欢迎大家下载使用哈~
    小蔡电脑助手3.0新版全新发布上线啦~欢迎大家下载使用哦~
    考试必备神器-真题园手机客户端Android版1.1正式上线啦,欢迎大家下载使用!
    Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
    Android开发之自定义圆角矩形图片ImageView的实现
    Android开发之自定义圆形的ImageView的实现
  • 原文地址:https://www.cnblogs.com/dw3306/p/9880454.html
Copyright © 2020-2023  润新知