精华内容
下载资源
问答
  • 本章采用的是:spring5+springMvc5+myBatisPlus3.0架构,查询方法为MP自带的方法 首先看下效果图是否为您所需,若不是无需浪费时间往下看 二、建立数据库表 此表设计为多种关系合成的一张表 三、编写实体类pojo ...

    一、介绍

    本章采用的是:spring5+springMvc5+myBatisPlus3.0架构,查询方法为MP自带的方法

    首先看下效果图是否为您所需,若不是无需浪费时间往下看

    在这里插入图片描述

    二、建立数据库表

    此表设计为多种关系合成的一张表
    在这里插入图片描述

    三、编写实体类pojo

    DepartmentAndPosition.java

    此处导包省略...
    
    /**
     * @Author : Administrator
     * @Date : 2020/8/1 17:11
     * @Description :部门和职位联合类
     */
    @TableName("departmentandposition")
    public class DepartmentAndPosition {
        @TableId(value = "id",type = IdType.AUTO)
        private Integer id;
        private String name;
        private Integer pid;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getPid() {
            return pid;
        }
    
        public void setPid(Integer pid) {
            this.pid = pid;
        }
    }
    
    

    四、编写Mapper接口

    DepartmentAndPositionMapper

    此处导包省略...
    
    @Mapper
    public interface DepartmentAndPositionMapper extends BaseMapper<DepartmentAndPosition> {
    
    
    }
    

    五、编写菜单类

    Menus.java

    此处导包省略...
    
    /**
     * @Author : Administrator
     * @Date : 2020/8/1 17:50
     * @Description :多级菜单类
     */
    public class Menus {
        private String title;
        private List children;
    
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public List getChildren() {
            return children;
        }
    
        public void setChildren(List children) {
            this.children = children;
        }
    }
    
    

    六、编写service层

    定义IDepartmentAndPositionService 接口

    此处导包省略...
    
    /**
     * @Author : Administrator
     * @Date : 2020/7/24 15:02
     * @Description :service层接口
     */
    public interface IDepartmentAndPositionService extends IService<DepartmentAndPosition> {
        /**
         * 笨方法查询子级
         *
         * @return
         */
        List<Menus> queryBase();
    
        /**
         * 递归查询子级
         *
         * @return
         */
        List<Menus> getParent();
    }
    
    

    编写service实现类

    导包省略...
    
    /**
     * @Author : Administrator
     * @Date : 2020/7/21 21:29
     * @Description :
     */
    @Service
    @Transactional
    public class DepartmentAndPositionService extends ServiceImpl<DepartmentAndPositionMapper, DepartmentAndPosition> implements IDepartmentAndPositionService {
        @Autowired
        private DepartmentAndPositionMapper departmentAndPositionMapper;
    
        /**
         * 先找到第一层菜单
         * 拿到第一层的id查询子级
         *
         * @param
         * @return
         */
        @Override
        public List<Menus> getParent() {
            //先查询所有
            List<DepartmentAndPosition> departments = departmentAndPositionMapper.selectList(null);
            System.out.println(departments.size());
            List<Menus> menusList = new ArrayList<>();
            for (DepartmentAndPosition d : departments) {
                //如果相等为第一级
                if (0 == d.getPid()) {
                    System.out.println(d.getId() + "," + d.getName() + "," + d.getPid());
                    Menus menus = new Menus();
                    menus.setTitle(d.getName());//第一级名字
                    //Children为集合,调用下面递归方法
                    menus.setChildren(getDepartmentList(d.getId()));
                    menusList.add(menus);
                }
            }
            return menusList;
        }
    
        /**
         * @param pid   首次所传为最大父级的id,值为 1
         * @param  所有部门信息集合
         * @return
         */
        public List<Menus> getDepartmentList(int pid) {
          
    		List<Menus> menusList = new ArrayList<>();
            QueryWrapper queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("pid", pid);
            List<DepartmentAndPosition> list = departmentAndPositionMapper.selectList(queryWrapper);
            for (DepartmentAndPosition d : list) {
                Menus menus = new Menus();
                menus.setTitle(d.getName());
                //递归
                menus.setChildren(getDepartmentList(d.getId()));
                menusList.add(menus);
            }
            return menusList;
        }
    }
    
    

    七、编写Controller层

    此处导包省略...
    
    /**
     * @Author : Administrator
     * @Date : 2020/7/21 21:39
     * @Description :关于员工的控制器
     */
    @Controller
    public class EmpController {
        @Resource
        private IDepartmentAndPositionService departmentAndPositionService;
    
        @RequestMapping("/queryMenu")
        @ResponseBody
        public List<Menus> quertMenu() {
            return departmentAndPositionService.getParent();
        }
        }
    

    八、前端HTML

    <div id="test1" style="width:20%;float:left;background: #92B8B1"></div>
    <script>
        layui.use(['table', 'form', 'jquery', 'layer', 'tree'], function () {
            var table = layui.table;
            var form = layui.form;
            $ = layui.jquery;
            var layer = layui.layer;
            var tree = layui.tree;
    
            //获取菜单
            $(function () {
                $.ajax({
                        type: 'get',
                        url: '/queryMenu.do',
                        datatype: 'json',
                        success: function (data) {
                            //console.log(data)
                            //渲染
                            tree.render({
                                elem: '#test1'  //绑定元素
                                , data: data
                            });
                        }
                    }
                );
    
            });
            </script>
    

    效果图

    在这里插入图片描述
    第二种方式:改变service层实现类的方法,其他不变

    @Override
        public List<Menus> getParent() {//被controller所调用
            //先查询所有
            List<DepartmentAndPosition> departments = departmentAndPositionMapper.selectList(null);
            System.out.println(departments.size());
            List<Menus> menusList = new ArrayList<>();
            for (DepartmentAndPosition d : departments) {
                //如果相等为第一级
                if (0 == d.getPid()) {
                    System.out.println(d.getId() + "," + d.getName() + "," + d.getPid());
                    Menus menus = new Menus();
                    menus.setTitle(d.getName());//第一级名字
                    menus.setChildren(getDepartmentList(d.getId(),departments));
                    menusList.add(menus);
                }
            }
            return menusList;
        }
    
       /**
         *
         * @param pid 所传为最大父级的id,值为 1
         * @param departments 所有部门信息集合
         * @return
         */
    public List<Menus> getDepartmentList(int pid,List<DepartmentAndPosition> departments) {
            List<Menus> menusList = new ArrayList<>();
            for (DepartmentAndPosition d : departments) {
                //如果所有pid等于父级id
                if (d.getPid() == pid) {
                    System.out.println(d.getId() + "," + d.getName() + "," + d.getPid());
                    Menus menus = new Menus();
                    menus.setTitle(d.getName());//首次第一级名字
                    menus.setChildren(getDepartmentList(d.getId(), departments));
                    menusList.add(menus);
                }
            }
            return menusList;
            }
    

    总结:第一种方式会频繁查询数据库,有多少条数据就会走多少条查询语句,效率较低。
    第二种方式是直接拿到父级id与departments集合里的下级pid进行比较,相等就直接set
    还望高手多多指点!

    展开全文
  • java源码包---java 源码 大量 实例

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

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

    2015-12-01 16:29:37
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示...
  • java源码包3

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

    千次下载 热门讨论 2016-01-03 17:37:40
    Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示...
  • Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,...
  • Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,...
  • Java右键弹出菜单源码 简单 Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,...
  • ”继续在 Delphi上人肆捞金,所以他有一段郁郁不得志。 比尔盖茨三顾茅庐,力邀 Anders hejlsberg,并许以重金和宽松的环境,终于把 Anders 挖到了微软的旗下,其后由其主持设计,在2000年6月发布了新的开发语言C#(读...
  • 首先,不同的用户在登录成功之后,根据不同的角色,会看到不同的系统菜单,完整菜单如下: 不同用户登录上来之后,可能看到的会有差异,如下: 每个用户的角色是由系统管理员进行分配的,系统管理员给用户分配角色...
  • 首先,不同的用户在登录成功之后,根据不同的角色,会看到不同的系统菜单,完整菜单如下: 不同用户登录上来之后,可能看到的会有差异,如下: 每个用户的角色是由系统管理员进行分配的,系统管理员给用户分配角色...
  • 导致后期改项目为组件化的时候十分痛苦,不同模块之间的业务逻辑实在关联太多,但还是没办法,于是按照步骤一步步实践。终极目标是,告别结构臃肿,让各个业务变得相对独立,业务组件在组件模式下可以独立开发。 ...
  • 8.6.2 从数据表创建层次关系 145 8.6.3 搜索categories数据表里的下级图书门类 147 8.6.4 搜索categories数据表里的上级图书门类 148 8.7 关系 149 8.7.1 1:1关系 149 8.7.2 1:n关系 150 8.7.3 n:m关系 151...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    JAVA开发平台体系结构 构架是一个系统的组织结构包括: 1. 系统分解成的各个部分 2. 它们的连接性 3. 交互机制 4. 通知系统设计的向导规则 JAVA开发平台架构 构架是一个系统的组织结构包括: 1. 系统分解成的...
  • 精通Qt4编程(第二版)源代码

    热门讨论 2014-01-19 13:07:18
    \13.2.4 查询字符串数据 337 \13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则表达式 342 \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14...
  • 精通qt4编程(源代码)

    热门讨论 2010-03-17 19:10:40
    \13.2.4 查询字符串数据 337 \13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则表达式 342 \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14章 XML ...
  • asp.net知识库

    2015-06-18 08:45:45
    Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

java菜单树查询步骤

java 订阅