public List<TdDepartment> createZtreeDep(String compId) {

        List<TdDepartment> dd = new ArrayList<TdDepartment>();
//查找所有子部门的sql语句
     String sql = "select dep_id,dep_name,super_id,folder from td_department "+
"start with super_id in ( "+
"select dep_id from td_department "+
"where valid_flag = 'Y' and comp_id = '"+compId+"')connect by prior dep_id = super_id";
    //查找部门本身的sql语句
String parentsql = "select dep_id ,dep_name,super_id,folder from td_department "+
"where valid_flag = 'Y' and comp_id = '"+compId+"'";
EpDB db = new EpDB();
ArrayList<HashMap> parentdeparts = db.getHashData(parentsql);
ArrayList<HashMap> departs = db.getHashData(sql);
if(parentdeparts == null || parentdeparts.size() <= 0)
return null;
    //将部门加入到list中
for(int i=0; i<parentdeparts.size(); i++){
String dep_id = parentdeparts.get(i).get("DEP_ID").toString();
String dep_name = parentdeparts.get(i).get("DEP_NAME").toString();
String super_id = parentdeparts.get(i).get("SUPER_ID").toString();
TdDepartment td = new TdDepartment();
td.setId(dep_id);
td.setPid(super_id);
td.setName(dep_name);
if(parentdeparts.get(i).get("FOLDER") != null){
String folder = parentdeparts.get(i).get("FOLDER").toString();
if("Y".equals(folder)){
td.setOpen("true");//非叶子结点则需要展开
}else{
td.setOpen("false");
}
}
//取消循环读取
//td.setChild(createDepartments(dep_id));
dd.add(td);
}
     //将子部门加入到list中 
for(int i=0; i<departs.size(); i++){
String dep_id = departs.get(i).get("DEP_ID").toString();
String dep_name = departs.get(i).get("DEP_NAME").toString();
String super_id = departs.get(i).get("SUPER_ID").toString();
TdDepartment td = new TdDepartment();
td.setId(dep_id);
td.setPid(super_id);
td.setName(dep_name);
if(departs.get(i).get("FOLDER") != null){
String folder = departs.get(i).get("FOLDER").toString();
if("Y".equals(folder)){
td.setOpen("true");//非叶子结点则需要展开
}else{
td.setOpen("false");
}
}
//取消循环读取
//td.setChild(createDepartments(dep_id));
dd.add(td);
} return dd;
}

需要优化点:

思考一:通过sql语句的优化来优化

思考二:通过程序递归的方法来优化

2015-9-14

解决结果:

通过sql语句的优化来优化,重点分析:

select dep_id as id ,dep_name as name,super_id as pid,folder from td_department
start with dep_id in
(
select dep_id from td_department
where valid_flag = 'Y' and comp_id = '46'
)
connect by super_id= prior dep_id

 public List<TdDepartment> createZtreeDep(String compId) {

         List<TdDepartment> dd = new ArrayList<TdDepartment>();
String sql = "select dep_id,dep_name,super_id,folder from td_department "+
"start with dep_id in ( "+
"select dep_id from td_department "+
"where valid_flag = 'Y' and comp_id = '"+compId+"')connect by super_id= prior dep_id";
System.out.println("sql="+sql);
EpDB db = new EpDB();
ArrayList<HashMap> departs = db.getHashData(sql);
if(departs == null || departs.size() <= 0)
return null;
System.out.println("获取到的部门List"+dd);
for(int i=0; i<departs.size(); i++){
String dep_id = departs.get(i).get("DEP_ID").toString();
String dep_name = departs.get(i).get("DEP_NAME").toString();
String super_id = departs.get(i).get("SUPER_ID").toString();
TdDepartment td = new TdDepartment();
td.setId(dep_id);
td.setPid(super_id);
td.setName(dep_name);
if(departs.get(i).get("FOLDER") != null){
String folder = departs.get(i).get("FOLDER").toString();
if("Y".equals(folder)){
td.setOpen("true");//非叶子结点则需要展开
}else{
td.setOpen("false");
}
}
//取消循环读取
//td.setChild(createDepartments(dep_id));
dd.add(td);
} return dd;
}

Oracle语句优化之一的更多相关文章

  1. 53个Oracle语句优化规则详解(转)

    Oracle sql 性能优化调整  1. 选用适合的ORACLE优化器        ORACLE的优化器共有3种:a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE ...

  2. Oracle语句优化1

    Oracle语句优化1 优化就是选择最有效的方法来执行SQL语句.Oracle优化器选择它认为最有效的     方法来执行SQL语句.         1. IS   NULL和IS   NOT   ...

  3. oracle 语句优化

    1. 选用适合的ORACLE优化器         ORACLE的优化器共有3种: a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可 ...

  4. Oracle语句优化规则(一)

    1. 选用适合的ORACLE优化器     ORACLE的优化器共有3种:    a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE (选择性)     设置缺省的优化 ...

  5. Oracle语句优化规则(二)

    21.       用EXISTS替换DISTINCT 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换  例如: ...

  6. oracle语句优化

    摘录来自https://blog.csdn.net/sap_jack/article/details/3766703 1.选用适合的Oracle优化器 Oracle的优化器共有3种: a.RULE(基 ...

  7. oracle学习 十 数据库的语句优化(持续更)

    平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则.   原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的 ...

  8. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

  9. Oracle SQL语句优化34条

    非常好用的SQL语句优化34条 1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 dri ...

随机推荐

  1. 在CentOS上安装ZooKeeper集群

    一共准备3个CentOS虚拟机 172.16.9.194 172.16.9.195 172.16.9.196 上传zookeeper-3.3.6.tar.gz到服务器并解压,3台服务器的目录结构如下 ...

  2. 2015年11月26日 Java基础系列(五)异常Exception

    序,异常都是标准类Throwable的一些子类的对象. Throwable类的几个方法 1 getMessage() 返回描述该异常的信息 2 printStackTrace() 把消息和栈的跟踪记录 ...

  3. java 练手 谁是最好的Coder

    Problem A 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB   描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所 ...

  4. R语言练习(一)

    b = seq(from=0, to=1, by=0.001) #一次方 l1 = function(b){ b^1 } y1 = l1(b) #二次方 l2 = function(b){ b^2 } ...

  5. poj3070 (斐波那契,矩阵快速幂)

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9630   Accepted: 6839 Descrip ...

  6. 2015baidu复赛 矩形面积(包凸 && ps:附quickhull模板)

    矩形面积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. hadoop之 mr输出到hbase

    1.注意问题: 1.在开发过程中一定要导入hbase源码中的lib库否则出现如下错误 TableMapReducUtil 找不到什么-- 2.编码: import java.io.IOExceptio ...

  8. 大数据之sqoop

    一.安装: 1 解压然后把mysql的驱动放在$SQOOP_HOME/lib 目录中2. conf/sqoop-en.sh export HADOOP_COMMON_HOME=/home/hadoop ...

  9. Window环境下搭建MyEclipse+Tomcat+MAVEN+SVN

    1.JDK的安装 首先下载JDK,这个从sun公司官网(http://www.oracle.com/)可以下载,根据自己的系统选择64位还是32位,安装过程就是next一路到底.安装完成之后当然要配置 ...

  10. InnoDB为什么要使用auto_Increment

    在Mysql表设计中,通常会使用一个与业务无关的自增列做为主键.这是因为Mysql默认使用B-Tree索引,你可以简单理解为"排好序的快速查找结构".如下是一个B-Tree的结构图 ...