根據節點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遞歸樹形結構”哦。

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