精华内容
下载资源
问答
  • 菜单在很多系统中都存在,然后在查询的时候确实很费事,如果使用后台代码逻辑去查询,会设计到递归等操作,频繁发起数据库连接,增加数据库压力。经过我多番研究发现mybatis可以实现菜单查询(包括多级);...

    树形菜单在很多系统中都存在,然后在查询的时候确实很费事,如果使用后台代码逻辑去查询,会设计到递归等操作,频繁发起数据库连接,增加数据库压力。经过我多番研究发现mybatis可以实现树形菜单查询(包括多级树);树形菜单如下:

    该图仅只有三级菜单,但是提供的方法可以做到多级菜单适用

    一、创建数据库表(略):

           具体表中要有   id和父id字段

    二、创建实体类:

           

    /**
     * 树形菜单类
     * @author 王 维
     * create time:2019年7月1日
     */
    public class catagoy implements Serializable {
    
    	private static final long serialVersionUID = 1L;
    	private  Integer id ;
    	/**
    	 * @TODO  这里省略树形中的其他属性,仅给出关键属性
    	 */
    	private Integer parentId;
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public Integer getParentId() {
    		return parentId;
    	}
    	public void setParentId(Integer parentId) {
    		this.parentId = parentId;
    	}
    	
    	
    }

    三、创建和菜单父类一样的子类,但是多一个子菜单属性,并继承父菜单:

    /**
     * 子菜单 -继承父类菜单实体类
     * @author 王 维
     * create time:2019年7月1日
     */
    import java.util.List;
    public class catagoyChild extends catagoy implements Serializable {
    	private static final long serialVersionUID = 1L;
    	/**
    	 * 子菜单  集合
    	 */
    	private List<catagoy> childCatatoyList;
    
    	public List<catagoy> getChildCatatoyList() {
    		return childCatatoyList;
    	}
    	public void setChildCatatoyList(List<catagoy> childCatatoyList) {
    		this.childCatatoyList = childCatatoyList;
    	}
    }
    

    四、编写mybatis mapper(仅给出关键代码):

      4.1:给出返回map:

         

    	<!-- 结果Map -->
    	<resultMap id="BaseResultMap" type="com.**.catagoyChild"><!-- 这里使用含子菜单的Bean-->
    		<result property="id" jdbcType="INTEGER" column="f_id"/>
    		<result property="parentId" jdbcType="INTEGER" column="f_parent__id"/>
            <!--这里使用mybatis  collection 进行集合查询  这是关键点-->
    		<collection property="childCatatoyList"  javaType="java.util.ArrayList" ofType="com.**.catagoyChild"
    		select="getChildLists" column="f_id">
    		</collection>
    	</resultMap>

    4.2:编写父查询-取出所有一级菜单(顶级);也是整个查询的入口和返回处,service调用此接口:

        

    	<select id="getAllCategory" resultMap="BaseResultMap">
    	    select * from t_pro_category where f_level=1  <!-- 这里level 表示属于第几级 -->
    	</select>

    4.3:编写关联集合查询-参数为父级菜单 id:

     

    	<select id="getChildLists" parameterType="String" resultMap="BaseResultMap">
    	    select * from t_pro_category where f_parent__id=#{id}  <!--父id=传过的id -->
    	</select>

    五、调用接口,返回所有分类。

    注意:该方法可能在超大数据第一次加载数据时有点慢,可以配合缓存Ehcache,在第一次查询时将数据加入缓存,这样后面的查询将会直接从缓存中读取。该方法纯属个人研究,如果不合理之处,请提意见。

    展开全文
  • 数据库的设计 使用ssm 实体类 mapper映射文件查询出所有的菜单 使用递归方法 转载于:https://www.cnblogs.com/zuoxh/p/9754460.html

    数据库的设计

    使用ssm

    实体类

    mapper映射文件查询出所有的菜单

    使用递归方法

    转载于:https://www.cnblogs.com/zuoxh/p/9754460.html

    展开全文
  • Java递归方法 /** * * @param pid 父菜单ID * @return */ public List&lt;WsMenu&gt; selectOneList(Integer pid) { //fList是递归查询条件 List&lt;Integer&gt; fL...

    数据库表

    查询结果展示

    Java递归方法

     /**
         *
         * @param pid 父菜单ID
         * @return
         */
        public List<WsMenu> selectOneList(Integer pid) {
            //fList是递归查询条件
            List<Integer> fList = new ArrayList<Integer>();
            fList.add(pid);
            //查询是递归返回结果sumList
            List<Integer> sumList = new ArrayList<Integer>();
            //然后执行数据库查询,最终返回list
            List<Integer> list =  recursion(fList,sumList);
    
            return wsMenuMapper.selectOneList(list);
        }
    
        /**
         *
         * @param fList 初始化的父级ID
         * @param sumList 保存的全部ID
         * @return
         */
        public List<Integer> recursion(List<Integer> fList,List<Integer> sumList) {
    
            List<Integer> sonIdList = wsMenuMapper.selectIdList(fList);
            if (sonIdList.size()==0){
                return sumList;
            }
            sumList.addAll(sonIdList);
            return recursion(sonIdList,sumList);
        }

    mybatis 查询语句

    <!--查询所有子集ID-->
        <select id="selectIdList" resultType="Integer" >
             select id from ws_menu where pid in
            (
            <foreach collection ="list" item="item" index= "index" separator =",">
              #{item}
            </foreach>
            )
        </select>
    
        <!--查询所有自己对象列表-->
        <select id="selectOneList" resultType="com.cloudtop.demo19.model.WsMenu" >
            select * from ws_menu where id in
            (
            <foreach collection ="list" item="item" index= "index" separator =",">
                #{item}
            </foreach>
            )
            order by field
            (id,
            <foreach collection ="list" item="item" index= "index" separator =",">
                #{item}
            </foreach>
            )
        </select>

     

    展开全文
  • 菜单树为例 如下是数据库表的数据: 首先查询出所有的菜单数据,调用createMenu方法将数据传入; public List createMenu(List&lt;mp01_menu&gt; mp01_menus) {  ArrayList&lt;mp01_menu&gt...

    这里只希望起到一个抛砖引玉的作用,其他高大上的实现还需具体情况具体分析。

    以菜单树为例

    如下是数据库表的数据:

    首先查询出所有的菜单数据,调用createMenu方法将数据传入;

    public List createMenu(List<mp01_menu> mp01_menus) {
                ArrayList<mp01_menu> rootMenu = new ArrayList<>();

                     查询根节点数据
                     for(mp01_menu menu:mp01_menus){
                          if(menu.getUpmenuid().equals("0")){
                                rootMenu.add(menu);
                          }
                     }

                    获取根节点下的子节点
                     for(mp01_menu menu:rootMenu){
                         List<mp01_menu> child = getChild(menu.getMenuid(), mp01_menus);
                         menu.setChildren(child);
                     }
                     return rootMenu;
            }
         public List<mp01_menu> getChild(String menuid, List<mp01_menu> allmp01_menus) {
                //存放子菜单的集合
                ArrayList<mp01_menu> listChild = new ArrayList<>();
                for (mp01_menu menu : allmp01_menus) {
                    if (menu.getUpmenuid().equals(menuid)) {
                        listChild.add(menu);
                    }
                }
                //递归:
                for (mp01_menu menu : listChild) {
                    menu.setChildren(getChild(menu.getMenuid(), allmp01_menus));
                }
                if (listChild.size() == 0) {
                    return null;
                }
                return listChild;
            }

    展开全文
  • vue+java 实现菜单

    2020-12-04 16:31:17
    目前项目有个实现物料档案查询的功能,其中菜单没做过。研究了一上午,使用ant-vue加java实现。 与大家分享一下。 一、数据库设计 必要字段: id: 主键 pid: 父id title: 名称 level:级别,1为跟级别 二、...
  • java遍历机构和菜单树形结构数据

    千次阅读 2018-11-01 16:50:48
    查询机构形机构返回数据 &amp;amp;lt;功能详细描述&amp;amp;gt; @author DENG @version [版本号, 2018年11月1日] @see [相关类/方法] @since [产品/模块版本] */ public class ResOrgDto { ...
  • java 定义mysql菜单

    2017-01-09 18:48:00
    数据库中的数据如下: 1.首先在Dao中实现查找方法 public List<ProductType> findAllByRoot() { //定义集合,添加ProductType对象 List<ProductType>... //查询语句,查询pr...
  • SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式百度百科公用表表达式(CTE),是一个在查询中定义的临时命名结果...创建的语法是:with ()as()select * from 1、生成数据--菜单目录结构表...
  • 获取形结构通常使用的方法是递归查询,但是递归循环比较多,查询数据库比较频繁,性能还有代码都比较繁琐。现我们可以使用引用复制的方法获取结构。实现代码如下,我们用菜单做实例。 list 只需要获取所以菜单就...
  • 数据库中的数据如下:1.首先在Dao中实现查找方法public List findAllByRoot() {//定义...//查询语句,查询producttype表中的所有数据String sql = "SELECT * FROM producttype ";try {//采用从C3P0获取connection连...
  • 异步加载节点,适用于节点数量很多的结构,通过zTree等插件封装的方法,传入指定的节点ID查询出当前节点下的子节点信息。一次性生成全部节点,适用于小数据量的结构。 今天的笔记记录的是第二种思路的实现方式,...
  • ztree 菜单结构转JSON

    千次阅读 2019-01-10 16:05:37
    以layui侧边栏菜单为例,实现java以json形式返回给前端侧边栏菜单 前端很常见的侧边栏菜单展示,但是前端有些控件的格式有自己的风格,只要返回标准json就可以进行转换 从数据库结构开始 常用pid=o或者=null...
  • 今天工作中做权限分配部分要查询菜单,而菜单是数结构,刚开始我是用的递归,后来又仔细思考了一下,总结了一下. 二.三种组装方法 1. 递归调用 public Result getBmsMenuList(UserSessionVO userSessionInfo) { //...
  • Eclipse的"Call Hierarchy"可以查看一个Java...IntelliJ IDEA中可以在主菜单中选择Navigate | Call Hierarchy命令查看一个Java方法调用(caller和callee两个方向),但是不像Eclipse那样可以查看类成员变量的调用...
  • Java将List对象列表转为形结构

    千次阅读 2020-03-01 19:21:53
    经常遇到 菜单、部门等对象列表,输出到前端的时候需要转换成树状结构,一般人都想到递归调用,个人不是很喜欢递归,重写一个简单易懂方法针对这类小需求。 假设查询部门对象列表,部门对象为 SysOrg 如下: @Table...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示...
  • 本章采用的是:spring5+springMvc5+myBatisPlus3.0架构,查询方法为MP自带的方法 首先看下效果图是否为您所需,若不是无需浪费时间往下看 二、建立数据库表 此表设计为多种关系合成的一张表 三、编写实体类pojo ...
  • Eclipse的"Call Hierarchy"可以查看一个Java...IntelliJ IDEA中可以在主菜单中选择Navigate | Call Hierarchy命令查看一个Java方法调用(caller和callee两个方向),但是不像Eclipse那样可以查看类成员变量的调用...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下...
  • 作者:蝈蝈俊IDEA的查询引用、调用关系图的功能 - 蝈蝈俊 - 博客园Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员变量的调用(caller和callee两个方向),非常方便。 在IDEA中类似功能被划分到了三个命令...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...
  • Java开发技术大全(500个源代码).

    热门讨论 2012-12-02 19:55:48
    differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java ...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示...
  • Java2实用教程.rar

    2014-11-10 10:33:17
    Java2实用教程 rar 第1章Java入门 1 1Java的诞生 1 2Java的特点 1 3安装Sun公司的SDK 1 4一个Java程序的开发过程 1 5一个简单的Java应用程序的开发过程 1 6一个简单的Java小应用程序 1 7什么是JSP 习题 第2章标识符...
  • java自学之道

    2014-01-05 20:17:04
    5.11 形关系网 5.12 开发自己的文本编辑器 5.13 开发自己的剪切板 5.14 文本拖动效果演示 5.15 怎样拖动图片 5.16 开发自己的数字时钟 5.17 数字动画 5.18 滑杆调试器 5.19 启动程序开发 5.20 开发自己的调色板 ...
  • Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,...

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

java菜单树查询方法

java 订阅