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. JSP-Servlet的工作流程

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...

  2. IntelliJ IDEA 当pom.xml更新时,自动加载pom.xml

    http://stackoverflow.com/questions/19444471/intellij-idea-how-to-synchronize-project-libraries-with- ...

  3. 测试LVS+Keepalived高可用负载均衡集群

    测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...

  4. 固定导航(Sticky nav)

    方法1: <div class="footer"></div> .footer{ position:fixed; bottom:0; left:0; wid ...

  5. MVC下分页的自定义分页一种实现

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  6. Mysql表分区几种方式

    自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...

  7. mybatis map foreach遍历

    mybatis map foreach遍历 转至http://www.cnblogs.com/yg_zhang/p/4314602.html mybatis 遍历map实例 map 数据如下 Map& ...

  8. Promise 异步(asynchronous )编程

    概述 Promise.all(iterable) 方法返回一个promise,该promise会等iterable参数内的所有promise都被resolve后被resolve,或以第一个promis ...

  9. golang笔记——IDE

    可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目 ...

  10. objective-c与c++的差异

    oc的编译指令为 clang -fobjc-arc -framework Foundation test.m -o test oc中,1表示YES,0表示NO.并不是非0值都是YES,这是因为BOOL ...