今天幹活兒的時候,遇到了一個需求,數據表裏的數據是樹狀結構,表結構如下:
,我需要根據某節點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遞歸樹形結構”哦。