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. 【windows 访问控制】五、访问权限和访问掩码AcessMask

    访问掩码格式 所有安全对象都使用下图所示的访问掩码格式来安排其访问权限. 在这种格式中,低16位用于特定对象的访问权限,后8位用于标准访问权限,这些权限适用于大多数类型的对象,而4个高位用于指定通用访 ...

  2. C# InterFace 接口

    接口设计方式 自顶向下 (如图所示),自底向上. 接口成员: 事件 public interface IDrawingObject { event EventHandler ShapeChanged; ...

  3. vue+element ui后台遇到的坑

    今天在用elementui做后台系统,遇到第一个坑:分页显示的是英文 按照官网组件复制下来的代码: <el-row :gutter="0" style="margi ...

  4. 一、ES6基础

    一.ECMAScript和JavaScript关系 JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标 准,但 ...

  5. WPS:字母自动变大写的解决办法

    设置中:

  6. c# 导出Excel模板(在项目中有现成的Excel模板)

    在项目中会有导出模板功能,把现成的Excel模板导出去填写之后再进行导入,这里说说怎么导出模板: 模板存放位置: 点击导出模板按钮:  private string currentPath = Pat ...

  7. websocket原理和基于c/c++实现的websocket协议栈(更新中)

    参考: 博客1:http://blog.sina.com.cn/s/blog_bf397e780102w25k.html https://www.cnblogs.com/barrywxx/p/7412 ...

  8. CentOS8安装Geant4笔记(一):Geant4介绍、编译和安装

    前言   在服务器CentOS8.2上安装geant4软件.   GEANT4 介绍   Geant4 是一个用于模拟粒子穿过物质的工具包.其应用领域包括高能.核物理和加速器物理,以及医学和空间科学研 ...

  9. git命令合集

    ##快捷键 ##一. 快捷键 1. 清屏快捷键 control+L 2. vim快捷操作 * control+b 往上翻页 * Control+f 往下翻页 * shift+g 回到末尾 3. oh ...

  10. 七天接手react项目-起步

    七天接手react项目-起步 背景 假如七天后必须接手一个 react 项目(spug - 一个开源运维平台),而笔者只会 vue,之前没有接触过 react,此刻能做的就是立刻展开一个"7 ...