根据节点id递归出所有子孙节点,树状结构,递归函数

今天干活儿的时候,遇到了一个需求,数据表里的数据是树状结构,表结构如下:

,我需要根据某节点id获取所有子孙节点。最后搞定,思路如下:

最终函数如下:

/**
* 根据文件夹id获取所有子孙文件夹(包括本文件夹在内)
* @param folderId 文件夹id
* @param currentUser 登录当前系统的用户
* @return 
*/
private void getChild(String folderId, User currentUser) {
	// 获取本文件夹实体
	CapSharesysLocalfolder currFolder = capSharesysLocalfolderService.get(new CapSharesysLocalfolder(folderId));
	// 放入结果集,这里的结果集是一个静态变量
	folderList.add(currFolder);
	// 获取本文件夹的所有子集
	// 取下层级
	int level = currFolder.getLevel() + 1;
	// 本文件夹id作为父文件夹Id
	String parentId = folderId;
	// 对文件夹赋值
	CapSharesysLocalfolder capSharesysLocalfolder = new CapSharesysLocalfolder();
	capSharesysLocalfolder .setLevel(level);
	capSharesysLocalfolder.setParentId(parentId);
	// 根据父文件夹ID和层级取该目录下对应的子文件夹集合
	List<CapSharesysLocalfolder> localfolderList = capSharesysLocalfolderService.findNextLocalfolderList(capSharesysLocalfolder);
	// 子集合不为空
	if(localfolderList!=null && localfolderList.size()>0){
		for(int i=0;i<localfolderList.size();i++){
			CapSharesysLocalfolder tempFolder = localfolderList.get(i);
			getChild(tempFolder.getId(), currentUser);
		}
	// 子集合为空
	}else{
		return;
	}
}

其实,如果可以的话,我希望能够用一句sql语句解决问题,不写数据库函数的那种,当初大四的时候姚哥教过的,可惜都还给老师了。

 

要是哪位小伙伴有好办法能做到,还请不吝赐教,或者相互交流一下也是好的,微信:pp8845521,邮箱:[email protected],加好友或者发邮件请注明“一句SQL递归树形结构”哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章