关于项目中出现的多层级菜单的实现方法

关于项目中出现的多层级菜单的实现方法

在项目开发中,经常会有多层级菜单的功能需求需要实现,实现多层级菜单一般都是采取递归的方式进行逐级遍历,但是这种方式存在明显的不足,就是当层级关系比较深时,通过父级去递归对应的子级,子级去递归自己的子级时,如果涉及到数据库的查询,那么就会多次发送SQL查询语句去数据库查询,造成数据库访问剧增,严重影响系统功能的响应速度,造成不好的用户体验。这里,我给大家介绍一种优化的方式来实现同样的功能需求,在介绍之前,先给出常规递归的实现方式。

  1. 说明
    博主给出的例子中,采用了基于Vue的前端框架ElementUI的树形菜单控件,后端采用MyBatis-Plus查询数据库给前端返回需要的数据形成树形菜单。

  2. 界面效果
    形如这种的树形效果
    关于项目中出现的多层级菜单的实现方法

  3. 实体类关系配置
    表示商品类型的实体类中增加子类的集合,用户保存当前父级类型对应的子类型
    关于项目中出现的多层级菜单的实现方法
    关于项目中出现的多层级菜单的实现方法

  4. service层主要实现代码如下【递归方式】
    关于项目中出现的多层级菜单的实现方法关于项目中出现的多层级菜单的实现方法明显看代码可以看出,使用这种方式会发送很多次查询去访问数据库,效率很低。

  5. 下面给出一种优化的方式,这种方式只需要查询一次数据库。其核心思想就是通过循环判断。
    关于项目中出现的多层级菜单的实现方法

  6. 然后前端发出请求直接访问后端的服务【这里调用的是通过循环查询的服务接口】
    前端的请求访问
    关于项目中出现的多层级菜单的实现方法
    关于项目中出现的多层级菜单的实现方法

    后端的接口
    关于项目中出现的多层级菜单的实现方法

  7. 请求响应中的数据
    关于项目中出现的多层级菜单的实现方法
    关于项目中出现的多层级菜单的实现方法