菜单/部门树形结构,查询子节点查出完整的树形结构

菜单/部门树形结构,查询子节点查出完整的树形结构

/*
        *   1、查询包含关键字的节点
        *   2、遍历节点
        *      1)查询该节点的所有父节点,添加集合中
        *      2)查询该节点的所有子节点,添加集合中
        *   3、去重
        *   4、将当前节点结合生成树结构
        *
        */

1、自己根据实际情况写查询

2、查询该节点的所有父节点,添加集合中

<!-- 查询父节点信息 -->
	<select id="queryParentDeparts" resultType="com.modules.system.model.SysDepartNbTreeModel">
		SELECT distinct  t.* FROM SYS_DEPART t
		where t.del_flag = '0'
		START WITH id in
		<foreach collection="departIds" item="item" index="index"  open="(" separator="," close=")">
			#{item}
		</foreach>
		CONNECT BY PRIOR PARENT_ID = ID
		ORDER BY depart_order asc;
	</select>

<!-- 查询子节点信息 -->
	<select id="queryChildDeparts" resultType="com.casic.modules.system.model.SysDepartNbTreeModel">
		SELECT distinct  t.* FROM SYS_DEPART t
		where t.del_flag = '0'
		START WITH id in
		<foreach collection="departIds" item="item" index="index"  open="(" separator="," close=")">
			#{item}
		</foreach>
		CONNECT BY PRIOR ID = PARENT_ID
		ORDER BY depart_order asc;
	</select>

3、去重
用流或者set或者其他方法
我用流处理

tempList = tempList.stream().distinct().collect(Collectors.toList());

4、生成树结构(直接贴源码)

public List<SysDepartTreeModel> queryByCondition(String keyWord) {

        /*
        *   1、查询包含关键字的节点
        *   2、遍历节点
        *      1)查询该节点的所有父节点,添加集合中
        *      2)查询该节点的所有子节点,添加集合中
        *   3、去重
        *   4、将当前节点结合生成树结构
        *
        */

        List<SysDepartTreeModel> result = new ArrayList<>();
        List<SysDepartTreeModel> tempList = new ArrayList<>();

        // 1、查询包含关键字的节点
        List<SysDepart> targetDeparts = this.list(new QueryWrapper<SysDepart>().like("DEPART_NAME", keyWord));

        List<String> departIds = targetDeparts.stream().map(SysDepart::getId).collect(Collectors.toList());
        // 1)查询该节点的所有父节点,添加集合中
        List<SysDepartTreeModel> parentDeparts = sysDepartMapper.queryParentDeparts(departIds);
        // 2)查询该节点的所有子节点,添加集合中
        List<SysDepartTreeModel> childDeparts = sysDepartMapper.queryChildDeparts(departIds);
        tempList.addAll(parentDeparts);
        tempList.addAll(childDeparts);



        // 去重
        tempList = tempList.stream().distinct().collect(Collectors.toList());

        if(!CollectionUtils.isEmpty(tempList)){
            for(SysDepartTreeModel sysDepart:tempList){
            // 我这种是没有根节点,具体根据实际情况修改,有的是0,有的是1
                if (sysDepart.getParentId() == null){
                    result.add(sysDepart);
                }
                for(SysDepartTreeModel depart:tempList){
                    if(depart.getParentId()==null){
                        continue;
                    }
                    if(depart.getParentId().equals(sysDepart.getId())){
                        sysDepart.getChildren().add(depart);
                    }
                }
            }
        }
        return result;
    }

// 欢迎私信交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值