zoukankan      html  css  js  c++  java
  • 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;
        }
     
     
  • 相关阅读:
    无root权限安装tmux
    mosquitto_pub和mosquitto_sub 命令参数说明
    安装Mosquitto学习MOTT协议
    Linux之prink原理
    JZ2440支持设备树(1)-添加设备树之后kernel的启动参数跟dts里面不一致
    Linux可以生产uImage
    Ubuntu18.04下make menuconfig缺少ncurses库
    如何打开kernel最开始的打印
    buildroot管理uboot+kernel+rootfs
    STM32L071CBTX操作ECC508
  • 原文地址:https://www.cnblogs.com/dw3306/p/9880454.html
Copyright © 2011-2022 走看看