java树形菜单实现

Posted 邓维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
 
 

 

以上是关于java树形菜单实现的主要内容,如果未能解决你的问题,请参考以下文章

java树形菜单实现

java实现树形菜单

java如何实现二级树形菜单动态显示。要求加载页面时显示一级,点击一级菜单再去数据库查找出二级菜单

使用Java8轻松实现菜单树形数据

生成树形菜单

(记录贴)java后台实现树形菜单+分页返回数据