Mybatis-Plus父子菜单

首先来看一下实现的效果

pojo层

@Data
@TableName("platform_role")
public class Role implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO)
private Long id; private String roleName; private String roleKey; private Long createdBy; @TableField(fill = FieldFill.INSERT)
private LocalDateTime createdDate; private Long lastModifiedBy; private LocalDateTime lastModified; private String owner; }

MenuMapper

@Mapper
@Repository
public interface MenuMapper extends BaseMapper<Menu> {
}

MenuService

public interface IMenuRoleService extends IService<MenuRole> {
}

MenuServiceImpl

package com.zcx.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zcx.pojo.Menu;
import com.zcx.mapper.MenuMapper;
import com.zcx.service.IMenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.ArrayList;
import java.util.List; /**
* <p>
* 菜单实现层
* </p>
*
* @author zcx
* @since 2022-03-31
*/
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
@Autowired
MenuMapper menuMapper;
/**
 * @author zhaochangxin
 * @Description:查询所有菜单
 * @return: java.util.List<com.zcx.pojo.Menu>
 * @date 2022/3/31 17:13
 * @throws
 */
@Override
public List<Menu> queryAllMenu() {
QueryWrapper<Menu> menuQueryWrapper = new QueryWrapper<>();
List<Menu> EndMenu = new ArrayList<>();
// 查询到父菜单
menuQueryWrapper.eq("parent_id","0");
List<Menu> RootMenu = menuMapper.selectList(menuQueryWrapper);
// 查询所有除父菜单之外的菜单
menuQueryWrapper.clear();
menuQueryWrapper.ne("parent_id","0");
List<Menu> menusListNeRoot = menuMapper.selectList(menuQueryWrapper);
// 去遍历父菜单 将父菜单和所有菜单比较 如果有菜单的parent_id==他的id 就将他添加为children
for (Menu menu : RootMenu) {
//查询子菜单 递归方法
EndMenu.add(getChildrenList(menu, menusListNeRoot));
}
return EndMenu;
}
/**
 * @author zhaochangxin
 * @Description:将父菜单和所有菜单比较 如果有菜单的parent_id==他的id 就将他添加为children
 * @Param childMenu: 父菜单
* @Param menuChildrenList: 所有除了父菜单的菜单
 * @return: com.zcx.pojo.Menu
 * @date 2022/3/31 17:11
 */
public Menu getChildrenList(Menu RootMenu, List<Menu> menuChildrenList) {
for (Menu menu : menuChildrenList) {
if (RootMenu.getId().equals(menu.getParentId())){
RootMenu.getChildren().add(getChildrenList(menu, menuChildrenList));
}
}
return RootMenu;
}
}

MenuController

package com.zcx.controller;

import com.zcx.common.vo.ApiResult;
import com.zcx.pojo.Menu;
import com.zcx.service.IMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; /**
* <p>
* 前端控制器
* </p>
*
* @author zcx
* @since 2022-03-31
*/
@Controller
@RequestMapping("/menu")
public class MenuController {
@Autowired
IMenuService menuService;
@ResponseBody
@RequestMapping("/list")
public ApiResult queryAllMenu(){
List<Menu> menus = menuService.queryAllMenu();
return ApiResult.success("查询所有菜单",menus);
}
}

有问题或更好的办法请留言告知,谢谢您的观看。

记MyBaits-Plus 实现菜单的无限层关系的更多相关文章

  1. 自写 zTree搜索功能 -- 关键字查询 -- 递归无限层

    唠叨一哈 前两天朋友跟我说要一个ztree的搜索功能,我劈头就是一巴掌:这种方法难道无数前辈还做少了?自己去找,我很忙~然后我默默地蹲着写zTree的搜索方法去了.为什么呢?因为我说了句“找不到是不可 ...

  2. 在Visual Studio中使用层关系图描述系统架构、技术栈

    当需要描述项目的架构或技术栈的时候,可以考虑使用层关系图. 在解决方案下添加一个名称为"TailspinToys.DesignModel"的建模项目. 在新建的建模项目下添加一个名 ...

  3. Vue&Element 前端应用开发之菜单和路由的关系

    我们一般的应用系统,菜单是很多功能界面的入口,菜单为了更好体现功能点的设置,一般都是动态从数据库生成的,而且还需要根据用户角色的不同,过滤掉部分没有权限的菜单:在Vue&Element的纯前端 ...

  4. js实现递归菜单无限层

    /*动态加载菜单*/ function dynamicMenu(data){ if (userID != "admin"){ //1.清空所有菜单 $("#menuLis ...

  5. js实现鼠标右键自定义菜单(弹出层),并与树形菜单(TreeView)、iframe合用(兼容IE、Firefox、Chrome)

    <table class="oa-el-panel-tree"> <tr> <td style="vertical-align: top; ...

  6. 【特效】手机端仿美团下拉菜单带遮罩层html+css+jquery

    写了一个手机端的下拉菜单,类似美团,用相对单位rem写的. 效果截图: 代码很简单,原理有点类似嵌套的选项卡,其中的难点在于弹出下拉菜单后,出现黑色半透明遮罩层,而且下层列表页面禁止滚动了.关键就是给 ...

  7. IDEA下Maven项目搭建踩坑记----2.项目编译之后 在service层运行时找不到 com.dao.CarDao

    项目写的差不多 想运行一下,然后发现运行到Service层的时候报错说找不到Dao层文件 ,纠结半天之后看了下编译好的项目文件,发现mapper文件下边是空的, 于是就百度找一下原因,结果说是IDEA ...

  8. [转]ASP.NET 2.0中GridView无限层复杂表头的实现

    本文转自:http://blog.csdn.net/net_lover/article/details/1306211 实现方法就是给单元格填充我们想要的格式代码. C# <%@ Page La ...

  9. 我的架构设计~用层关系图说说mvc,mvvm,soa,ddd

    下面是按着我所接触的架构模式,开始一个一个的说一下 第一 标准架构 三层结构

随机推荐

  1. 分布式 PostgreSQL - Citus 架构及概念

    节点 Citus 是一种 PostgreSQL 扩展,它允许数据库服务器(称为节点)在"无共享(shared nothing)"架构中相互协调.这些节点形成一个集群,允许 Post ...

  2. Python:格式化字符串的几种方式

    1.% 'abc%s'%'123' 'abc123' 'abc%s%s'%('123','456') 'abc123456' 当变量v是一个Tuple.List且其中元素数量和字符串中%数量相同时,可 ...

  3. JZ-045-扑克牌顺子

    扑克牌顺子 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的 ...

  4. LeetCode-074-搜索二维矩阵

    搜索二维矩阵 题目描述:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例说明请 ...

  5. Linux CentOS7.X-安装mysql5.7数据库(安装包tar.gz)

    一.下载对应版本的mysql 1.官网下载压缩安装包. 进入到mysql官网下载自己对应版本的mysql,下载地址:https://dev.mysql.com/downloads/mysql/5.7. ...

  6. Spark SQL和CSl

    目录 1 2 3 4 1 import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object Demo1Sess { def ...

  7. 矩池云上如何修改cudnn版本

    修改与之前修改nvcc.cuda这些的原理是一样的. 国内镜像 https://mirrors.cloud.tencent.com/nvidia-machine-learning/ 检查系统版本 so ...

  8. Dapr集成之GRPC 接口

    Dapr 为本地调用实现 HTTP 和 gRPC API . 通常大家第一时间想到的是通过 gRPC 调用 Dapr,更重要的一点是Dapr 也可以通过 gRPC 与应用程序通信. 要做到这一点,原理 ...

  9. Nebula Graph 在企查查的应用

    本文首发于 Nebula Graph Community 公众号 背景 企查查是企查查科技有限公司旗下的一款企业信用查询工具,旨在为用户提供快速查询企业工商信息.法院判决信息.关联企业信息.法律诉讼. ...

  10. Applied Social Network Analysis in Python 相关笔记