Java实现树形菜单
提到树形菜单就要想到用递归的方式来实现
-
创建Mapper接口
查询父节点的所有子节点:参数为父节点的ID
@Select("select * from sys_depart where parent_id = #{pid}") public List<SysDepart> findParent(@Param("pid") String pid);
-
在业务层创建私有方法做递归(参数为要查询的父节点)
- 首先根据参数父节点的ID查出子节点。
- 判断查出的子节点是否为Null
- 遍历获取到的子节点,设置每个子节点的子节点(调用自身方法,查询当前子节点的所有子节点:把当前子节点的ID作为父节点进行查询,就可得到所有子节点)
- 将节点添加的新集合中一并返回。
private List<SysDepart> getChild(String pid){ List<SysDepart> departList = new ArrayList<>(); /*根据父节查出所有子节点的信息*/ List<SysDepart> sysDeparts = this.sysDepartCeMapper.findParent(pid); /*如果有子节点的信息进入判断*/ if (!CollectionUtils.isEmpty(sysDeparts)){ /*遍历当前节点*/ sysDeparts.forEach(i->{ /*设置每个节点的子节点(调用自身再次查询子节点,将当前节点的ID作为父节点查询子节点)*/ i.setChildren(this.getChild(i.getId())); /*将节点添加到集合中一并返回*/ departList.add(i); }); } return departList; }