如何获取树状结构数据

问题描述:有这样的一个表 ProductCatalog
id name parent
1 aaa
2 bbb
3 ccc 1
4 ddd 2
5 eee 3
6 fff 3
7 ggg 2
要根据id获取这个父节点下的所有子结点,数据量不是很大,不考虑用复杂的mysql语句(不知道那位大侠能用mysql语句实现,如果实现了告诉我一声哦)和存储过程(mysql也不支持存储过程),那就只好多写两个java方法了。复杂冗余的东西我就不多写了,主要就写获取树状结构数据的两个方法。

/**
* 根据parentid得到这个父节点下的一级子结点。
*/
@SuppressWarnings("unchecked")
public List getChildrenProductCatalogById(Long parentid) {
if(parentid!=null && !parentid.equals(""))
{
String jpql="select p from ProductCatalog p where p.parent=?";
Query q = this.entityManager.createQuery(jpql);
q.setParameter(1, parentid);
return q.getResultList();
}
else
{
String jpql = "select p from ProductCatalog p where p.parent=null or p.parent=''";
Query q = this.entityManager.createQuery(jpql);
return q.getResultList();
}
}


/**根据id得到这个父节点下的所有子结点
* @param id
* @return
*/
//先申明一个List类型的变量productCatalogs
public List getAllChildrenProductCatalogById(long id) {
List childrenProductCatalog = getChildrenProductCatalogById(id);
for (int i = 0; i < childrenProductCatalog.size(); i++) {
productCatalogs.add(childrenProductCatalog.get(i));
List childrenProductCatalog1 = getChildrenProductCatalogById(childrenProductCatalog.get(i).getId());
//如果子结点下还有子结点的话就自己调用自己
if (childrenProductCatalog1.size() > 0) {
getAllChildrenProductCatalogById(childrenProductCatalog.get(i).getId());
}
}
return productCatalogs;
}

你可能感兴趣的:(J2EE基础)