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 7.0 安装vim

    用的最小化 安装 看看跟VI命令有何区别 后面会记录使用经验 [root@localhost conf]# yum -y install vim 已加载插件:fastestmirror base | ...

  2. ServletContext

    1.为什么需要servletContext    需求1 需求2 --------------->解决之道servletContext     servletContext 1.ServletC ...

  3. Yii2 rules验证规则

    Rules验证规则:  required : 必须值验证属性||CRequiredValidator 的别名, 确保了特性不为空. [['字段名1','字段名2'],required]    //字段 ...

  4. PHP数组处理函数的使用array_map(三)

    /*函数array_map()函数:多数组回调函数---将回调函数作用到给定数组的单元上 * 1.语法:array array_map ( callback callback, array arr1 ...

  5. Linux查看软件安装路径

    Linux中查看某 个软件的安装路径(地址)有时显得非常重要.比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除. 添加安装文件等等,很多地方都要用到查案文件安装路径的命令. 这里给大 ...

  6. Centos7安装rabbitmq server 3.6.0

    ###假设所有操作在opt目录下进行 cd /opt mkdir apps cd apps ### 下载 RabbitMQ Server wget http://www.rabbitmq.com/re ...

  7. 【转】Flume日志收集

    from:http://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html Flume日志收集   一.Flume介绍 Flume是一个分布式.可 ...

  8. 性能:15个JavaScript本地存储技术的函数库和工具

    当构建更复杂的JavaScript应用程序运行在用户的浏览器是非常有用的,它可以在浏览器中存储信息,这样的信息可以被共享在不同的页面,浏览会话. 在最近的过去,这将有可能只被cookies文本文件保存 ...

  9. Codeforces Round #270 1003

    Codeforces Round #270 1003 C. Design Tutorial: Make It Nondeterministic time limit per test 2 second ...

  10. maven 项目配置

    创建java web的maven项目方法有两种,一是先创建maven项目,再选择jdk 和 dynamic web 运行环境 ,二是创建java项目,然后转化为maven项目 1.将普通java项目转 ...