获取节点下所有子节点

本文介绍两种查询多级数据的方法:一是使用SQL语句,在Oracle中可通过startwith...connectbyprior..实现;二是利用程序代码递归查询。递归方法适用于并发量较小、性能要求不高的场景。
在开发过程中,经常遇到多级数据,譬如部门等,如果想查一个节点下所有子节点,有两种办法可以实现。第一是sql,第二是通过程序代码进行递归。
第一种、通过sql实现。
oracle可以直接通过sql “start with ...connect by prior..”实现查出节点下的所有节点。
例如:
select t.group_id from MOD_DATA_GROUP t start with t.group_id ='123' connect by prior t.group_id = t.parent_id.
执行的结果是123节点下的所有子节点。
但是mysql却不支持 start with . 如果想使用sql实现则需使用存储过程来实现。

第二种、通过程序递归实现。

public void getAllDeptListByParentId(Integer parentid,List<Dept> list){
List<Dept> childList=getDeptListByParentId(parentid);
if(childList.size()==0)return;
for(Dept dept:childList){
if(dept.getLeaf()==0){
list.add(dept));
getAllDeptListByParentId(dept.getId(),list);
}else{
list.add(dept);
}
}
}

适用于并发量不大,性能要求不是太苛刻的场合,毕竟可能一次查询要操作N次数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值