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树形菜单实现的主要内容,如果未能解决你的问题,请参考以下文章