想到用递归算法来实现无级树形分类下任意分类及其子分类下的所有新闻:
这时查询的是分类c010201,结果打印为:
2
n5
n6
假如查询分类c0102,结果将包含子分类c010201的新闻,结果为:
4
n3
n4
n5
n6
不知道有没有可能通过一句SQL就能实现?先谢谢大家了
java 代码
- package com.lingirl.test;
- import java.util.*;
- /**
- * @author lingirl
- * 2007-08-19
- */
- public class Category {
- private Long id;
- private Category p_category;
- private String name;
- private Set children;
- private Set news;
- }
java 代码
- package com.lingirl.test;
- /**
- * @author lingirl
- * 2007-08-19
- */
- public class News {
- private Long id;
- private String name;
- private Category category;
- }
java 代码
- package com.lingirl.test;
- import java.util.*;
- /**
- * @author lingirl
- * 2007-08-19
- */
- public class Treetest {
- //递归算法求出任意树形分类节点及其所有子类下的所有新闻
- public Set getAllnews(Category category){
- if(category.getChildren()!=null)
- {
- Iterator chr=category.getChildren().iterator();
- while(chr.hasNext()){
- category.getNews().addAll(getAllnews((Category)chr.next()));
- }
- }
- return category.getNews();
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO 自动生成方法存根
- /**假设有一树形分类:
- * 01
- * 0101
- * 0102
- * 010201
- * 初始化如下:
- */
- Category c01=new Category();
- c01.setName("01");
- Category c0101=new Category();
- c0101.setName("0101");
- //c0101.setP_category(c01);
- Category c0102=new Category();
- c0102.setName("0102");
- //c0102.setP_category(c01);
- Set categories=new HashSet();
- categories.add(c0101);
- categories.add(c0102);
- c01.setChildren(categories);
- Category c010201=new Category();
- c010201.setName("010201");
- //c010201.setP_category(c0102);
- Set categories2=new HashSet();
- categories2.add(c010201);
- c0102.setChildren(categories2);
- News n1=new News();
- n1.setName("n1");
- News n2=new News();
- n2.setName("n2");
- News n3=new News();
- n3.setName("n3");
- News n4=new News();
- n4.setName("n4");
- News n5=new News();
- n5.setName("n5");
- News n6=new News();
- n6.setName("n6");
- //c01下有新闻:n1
- Set news1=new HashSet();
- news1.add(n1);
- c01.setNews(news1);
- //c0101下有新闻:n2
- Set news2=new HashSet();
- news2.add(n2);
- c0101.setNews(news2);
- //c0102下有新闻:n3,n4
- Set news3=new HashSet();
- news3.add(n3);
- news3.add(n4);
- c0102.setNews(news3);
- //c010201下有新闻:n5,n6
- Set news4=new HashSet();
- news4.add(n5);
- news4.add(n6);
- c010201.setNews(news4);
- Treetest test=new Treetest();
- Set news=test.getAllnews(c010201);//递归查询出分类c010201及其所有子分类下所有新闻;
- System.out.println(news.size());
- Iterator s=news.iterator();
- while(s.hasNext()){
- News n=(News)s.next();
- System.out.println(n.getName());
- }
- }
- }
这时查询的是分类c010201,结果打印为:
2
n5
n6
假如查询分类c0102,结果将包含子分类c010201的新闻,结果为:
4
n3
n4
n5
n6
不知道有没有可能通过一句SQL就能实现?先谢谢大家了
![](/javascripts/fckeditor/editor/images/smiley/msn/regular_smile.gif)