Tree树形菜单递归查询方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实体类Tree.java
public class Tree{
//主键id
private Long id;
//节点名称
private String name;
//是否为叶子节点(即没有子节点)
private boolean leaf;
//父节点
private Tree parent;
//子节点集合
private List children;
get set略....
}

//TreeDao实现类,TreeDao接口类代码略
public class TreeDaoImpl{
/**
* 查询某父节点下的直接子节点(即不包含孙子节点等)
*/
public List getTopChildren(Long parentId){
String sql = "select * from tree t where t.parentId = ?";
下面的进行数据库查询代码略去...
}

/**
* 根据提供的节点集合递归查询集合里每个节点的子节点,最终统一返回所有的子节点
* topChildren 是当前节点的直接子节点集合
* resultTrees 是最终返回的所有子节点集合
*/
public List getAllChildren(List topChildren,List resultTrees){
for(Tree tree:topChildren){
resultTrees.add(tree);
//如果当前节点是叶子节点,跳过不进行递归查询子节点
if(tree.leaf){
continue;
}
List children = getTopChildren(tree.getId());
getAllChildren(children,resultTrees);
}
return resultTrees;
}
}
假设你要查询的父节点id = 1,那么你Service层这样调用:
首先调用dao的getTopChildren方法查询得到顶级节点下的直接子节点
如:
List topList = treeDao.getTopChildren(1);
然后调用dao的getAllChildren()递归刚才得到的节点list查询得到所有节点集合
//用于存储最终返回的所有子节点
List allChilren = new ArrayList();
treeDao.getAllChildren(topList,allChildren);
执行完getAllChildren()方法后,allChilren 就存储了顶级节点下的所有子节点包括孙子节点直至叶子节点

得到了所有节点List,你们.net的tree控件 貌似可以绑定一个list 这样就可以实现一个树形菜单了 至于tree控件绑定xml,那你得再写个方法,遍历得到的list集合生成xml文件,再绑定到tree控件

相关文档
最新文档