首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

oracle树形查询怎么在java中做成地图

2013-09-06 
oracle树形查询如何在java中做成mapcreate table Dept(DepartNO varchar2(10),DepartName varchar2(20),To

oracle树形查询如何在java中做成map
create table Dept(   
DepartNO varchar2(10),  
DepartName varchar2(20),  
TopNo varchar2(10)  
);

insert into Dept values('001',' 董事会','0'); commit;  
 insert into Dept values('002','总裁办 ','001'); commit;  
 insert into Dept values('003','财务部 ','001'); commit;   
insert into Dept values('004','市场部 ','002'); commit;   
insert into Dept values('005','公关部 ','002'); commit;   
insert into Dept values('006','销售部 ','002'); commit;   
insert into Dept values('007','分销处 ','006'); commit;   
insert into Dept values('008','业务拓展处','004'); commit;   
insert into Dept values('009','销售科','007'); commit; 


现在要在java中做成一个map<String,Object>,不能写死,因为这是测试表,可能层级更多,当我点击一个部门时,把所有下面的子部门都查出来

比如说
当我传入 id 为006时,

map为
id:006
name: 销售部
list: [id : 007 name:分销处 list:[id: 009 name:销售科 list:[]]] 



如果传入id为001

那么就是
id:001
name: 董事会
list: [
            id : 002 name:总裁办 list:[
                                        id: 004  name:市场部  list:[.....]
                                     ]
            id : 003 name:财务部 list:[ 
                                         id: 005 name:公关部 list:[.....]
                                      ]
       ] 



这个map的格式可能不对,但是应该能看明白什么意思把
部门有多少层级最后map的层级也是多少


[解决办法]
做个递归就好了,先从id等于001开始查询,sql我是没做过树形结构,都是程序控制的
[解决办法]
http://blog.csdn.net/chenghui0317/article/details/9426759
[解决办法]

引用:
Quote: 引用:

http://blog.csdn.net/chenghui0317/article/details/9426759


结果集已经查出来了 ,就是不知道怎么把那个list转化成map

直接转化??没有现成的方法吧,,只能手动用for循环去封装了。。
[解决办法]
/**
 * 查询机构(递归循环遍历节点)
 */
public List<ContractType> listContractType(int parentid){
List<ContractType> contractTypeList =new ArrayList<ContractType>();
try {
contractTypeList = new ArrayList<ContractType>();
List<ContractType> list =searchContractTypeByParentId(parentid);
for (ContractType contractType : list){
ouputChildren(contractType, "",contractTypeList);
}
} catch (Exception e) {
e.printStackTrace();
}
return contractTypeList;
}

/**
 * 输出父节点下的孩子节点
 */
public void ouputChildren(ContractType parent, String parentPading,List contractTypeList){
//修改父节点的名称,直接前面加空格字符串 parentPading
//创建一个非持久化对象接收查询出的类型,不会存库
ContractType parents = new ContractType();
parents.setName(parentPading + parent.getName());
parents.setId(parent.getId());
//将修改完的父节点保存到typelist 传到页面 
contractTypeList.add(parents);
//查找孩子节点 
if (parent.getChildren().size() > 0){
//获得所有 孩子节点 
Set<ContractType> chilrenList = parent.getChildren();
//循环所有孩子节点
for (ContractType child : chilrenList)
{
//将孩子节点的孩子也放到页面变量中typelist 传到页面
ouputChildren(child, parentPading + "-",contractTypeList);
}
}
else {
return;
}
}

热点排行