`
a92575
  • 浏览: 17308 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

无限级菜单查询封装

阅读更多
-- 无限级菜单查询
  SELECT A.MENU_ID,                --菜单ID
               LEVEL AS NODES,   --菜单节点
               A.MENU_NAME,      --菜单名称
               A.MENU_PAREDNT_ID,--菜单父ID
               A.MENU_URL,       --菜单url
               A.ORDER_NO        --排序号
          FROM (SELECT B.MENU_ID,
                       B.MENU_NAME,
                       B.MENU_PAREDNT_ID,
                       B.MENU_URL,
                       B.ORDER_NO
                  FROM MENU B
                 WHERE 1 = 1) A
        CONNECT BY A.MENU_PAREDNT_ID = PRIOR A.MENU_ID
         START WITH A.MENU_PAREDNT_ID IS NULL
 

  List returnList = "" // 这个list是通过SQL查询出来的结果集
  List oneList = new ArrayList(); // 一级菜单List
  Map twoMap = new HashMap();     // 二级菜单MAP
  Map threeMap = new HashMap();   // 三级菜单MAP
 
  // 封装成一个三级菜单的集合MAP
  for (Object object : returnList) {
   LazyDynaBean bean = (LazyDynaBean)object;
   if ("1".equals(ObjectUtils.toString(bean.get("NODES")))){ // 判断该节点是否一级菜单
    oneList.add(bean.getMap());
   } else if ("2".equals(ObjectUtils.toString(bean.get("NODES")))) { // 判断该节点是否二级菜单
    List tempList = (List)twoMap.get(ObjectUtils.toString(bean.get("MENU_PAREDNT_ID")));
    if(tempList == null){
     tempList = new ArrayList();
    }
    tempList.add(bean.getMap());
    twoMap.put(ObjectUtils.toString(bean.get("MENU_PAREDNT_ID")), tempList);
   } else if ("3".equals(ObjectUtils.toString(bean.get("NODES")))) {// 判断该节点是否三级菜单
    List tempList = (List)threeMap.get(ObjectUtils.toString(bean.get("MENU_PAREDNT_ID")));
    if(tempList == null){
     tempList = new ArrayList();
    }
    tempList.add(bean.getMap());
    threeMap.put(ObjectUtils.toString(bean.get("MENU_PAREDNT_ID")), tempList);
   }
  }

  // 解析封装的数据
  for(Object object : oneList) { // 一级菜单
   Map oneMapNodes = (Map)object;
   List twoListNodes = (List)twoMap.get(oneMapNodes.get("MENU_ID"));
   if (twoListNodes!=null && twoListNodes.size()>0) {
    for (Object twoobject : twoListNodes) { // 二级菜单
     Map twoMapNodes= (Map)twoobject;
    }
   }
  }
分享到:
评论

相关推荐

    无限级树型选择菜单

    无限级树型选择菜单是一种常见的UI设计模式,尤其在数据层级结构复杂且需要用户进行逐级选择的情况下。这种菜单能够以图形化的方式呈现数据的层级关系,用户可以通过展开、折叠节点来浏览和选择不同级别的选项。在IT...

    CSS+js无限级折叠导航菜单

    "CSS+js无限级折叠导航菜单"就是一个专为实现这种功能而设计的技术方案。这个方案结合了CSS(层叠样式表)和JavaScript的力量,创建了一个可以无限层级扩展的折叠式导航菜单,既美观又实用。 首先,CSS在其中起着...

    ASP无限级联动菜单源码[80端口原创]

    这个类可能封装了处理无限级菜单逻辑的方法,如读取数据库中的菜单结构,生成HTML代码,以及处理菜单的展开与收缩等行为。80端口是HTTP协议的默认端口,通常用于Web服务,这表明该源码是为运行在标准Web服务器上的...

    坏孩子无限级树型菜单

    这里使用DBHelperSql工具类进行数据库操作,这个工具类是.NET框架中常用的一个数据库访问助手,它可以封装SQL语句,简化插入、更新、删除和查询等操作。 2. **前端展示**:JS脚本(可能基于jQuery或者其他...

    js无限级树形菜单js无限级树形菜单js无限级树形菜单

    无限级树形菜单则允许用户展开任意多层的子节点,为用户提供更为灵活的浏览体验。下面我们将深入探讨如何使用JS实现无限级树形菜单。 1. **数据结构设计** - 为了构建树形结构,我们需要一个合适的数据结构来存储...

    无限级可刷新Js树型菜单

    6. UI库和框架:现代Web开发中,许多UI库(如React、Vue、Angular)提供了现成的树形组件,它们封装了上述功能,使得开发者可以更快速、方便地构建无限级可刷新的树型菜单。 7. 性能优化:对于大数据量的树型菜单,...

    JS无限级导航菜单实现方法

    需要注意的是,为了提高前端代码的可读性和可维护性,通常会将构建无限级菜单的JavaScript代码封装成一个独立的模块或函数,这样可以在需要的时候直接调用该函数并传入相应的数据即可生成菜单。 总结来说,实现...

    Jquery苹果风格导航菜单(横竖向上向下)

    - `js` 文件夹:包含实现导航菜单功能的jQuery脚本,可能有单独的.js文件来封装菜单功能。 - `css` 文件夹:存放定义菜单样式的CSS文件,用于设定颜色、字体、布局等视觉元素。 - `images` 文件夹:可能包含用于菜单...

    ASP无限级教程载柑

    本文通过一个具体的示例介绍了如何使用ASP技术实现无限级菜单的功能,包括数据库连接、数据查询、动态生成HTML以及CSS样式设计等多个方面的内容。这样的菜单结构不仅能够提升用户体验,还能有效地组织大量信息,是...

    JSP+javaBean+数据库 无限级动态树状菜单

    在IT领域,构建一个无限级动态树状菜单是一项常见的需求,尤其在网站管理、权限控制、数据分类等场景中。本项目使用了JSP、JavaBean以及数据库技术来实现这一功能,下面将详细讲解其中涉及的关键知识点。 1. **JSP...

    js树型菜单无限级分类

    该实现基于组件模式,组件模式是软件工程中的一种设计模式,它将功能封装到独立的模块中,这些模块可以单独使用,也可以组合在一起,形成更复杂的系统。在JavaScript中,这种模式常用于创建可复用的UI部件,如树形...

    无限级DHTML导航菜单

    JavaScript核心代码封装 引用方便 //说明:使用方法:在显示菜单的地方插入下面【】里的代码 // 1、载入菜单配置文件【<script language="JavaScript" src="config.txt"></script>】 // 2、显示多级菜单...

    Vue2组件tree实现无限级树形菜单

    1. 组件化思维:将树形菜单封装为独立的Vue组件。 2. 数据传递:通过`props`将数据从父组件传给子组件。 3. 事件监听:使用`v-on`或`@`语法处理节点点击事件。 4. 属性配置:通过`options`对象提供可配置的组件行为...

    BootStrap无限级分类(无限极分类封装版)

    <!...<...多级联动封装</title> <link href=./css/bootstrap.css rel=stylesheet> [removed][removed] [removed][removed] </head> <body> <div class=col-md-12

    asp.net 无限递归树型菜单... 采用dTree封装的自定义控件

    this.RecursiveTree1.DataTextField("菜单配置","Menu_ID", "Menu_ParentID", "Menu_Name", "Menu_Url", "Menu_Name","",""); 具体重载方法 说明 添加引用后,控件名.点 自行查看... //这里改写成你的数据库链接.. ...

    ASP+ACCESS二叉树左右值无限级分类,支持增,删,改,查,排序

    在ASP中,我们可以创建类(Class)来封装这些操作,比如这里提到的`classtree`,它可能包含了一系列的方法如`AddNode`、`DeleteNode`、`ModifyNode`、`FindNode`和`SortNodes`等。 在实际应用中,我们还需要考虑...

    jQuery Simple Tree Ajax无限级树形菜单插件php版

    jQuery Simple Tree Ajax无限级树形菜单插件php版 兼容性非常好,可异步加载,支持拖拽。插件本身只支持HTML节点加载的,网上有人进行扩展了,用了JSON,不过个人感觉这对速度影响实在微乎其微,还是直接封装出HTML...

    漂亮的无限级分类 | 无限级分类 | 无限级管理 | 无限级样式 |多级分类

    "JohnTree.Library"可能是项目中的一个库,封装了无限级分类的业务逻辑和数据访问层,提供了方便的方法来添加、删除、查找和遍历分类。而"JohnTree.Web"则可能是Web应用程序的前端部分,负责展示和交互,它可能使用...

    JQ-树形菜单

    考虑到代码的复用性和可维护性,开发者可能会将树形菜单的功能封装成一个jQuery插件。这样,只需简单地调用插件,就能在其他项目中实现树形菜单。 7. 兼容性和性能优化: 在实际应用中,还需确保树形菜单在不同...

Global site tag (gtag.js) - Google Analytics