记MyBaits-Plus 实现菜单的无限层关系
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 实现菜单的无限层关系的更多相关文章
- 自写 zTree搜索功能 -- 关键字查询 -- 递归无限层
唠叨一哈 前两天朋友跟我说要一个ztree的搜索功能,我劈头就是一巴掌:这种方法难道无数前辈还做少了?自己去找,我很忙~然后我默默地蹲着写zTree的搜索方法去了.为什么呢?因为我说了句“找不到是不可 ...
- 在Visual Studio中使用层关系图描述系统架构、技术栈
当需要描述项目的架构或技术栈的时候,可以考虑使用层关系图. 在解决方案下添加一个名称为"TailspinToys.DesignModel"的建模项目. 在新建的建模项目下添加一个名 ...
- Vue&Element 前端应用开发之菜单和路由的关系
我们一般的应用系统,菜单是很多功能界面的入口,菜单为了更好体现功能点的设置,一般都是动态从数据库生成的,而且还需要根据用户角色的不同,过滤掉部分没有权限的菜单:在Vue&Element的纯前端 ...
- js实现递归菜单无限层
/*动态加载菜单*/ function dynamicMenu(data){ if (userID != "admin"){ //1.清空所有菜单 $("#menuLis ...
- js实现鼠标右键自定义菜单(弹出层),并与树形菜单(TreeView)、iframe合用(兼容IE、Firefox、Chrome)
<table class="oa-el-panel-tree"> <tr> <td style="vertical-align: top; ...
- 【特效】手机端仿美团下拉菜单带遮罩层html+css+jquery
写了一个手机端的下拉菜单,类似美团,用相对单位rem写的. 效果截图: 代码很简单,原理有点类似嵌套的选项卡,其中的难点在于弹出下拉菜单后,出现黑色半透明遮罩层,而且下层列表页面禁止滚动了.关键就是给 ...
- IDEA下Maven项目搭建踩坑记----2.项目编译之后 在service层运行时找不到 com.dao.CarDao
项目写的差不多 想运行一下,然后发现运行到Service层的时候报错说找不到Dao层文件 ,纠结半天之后看了下编译好的项目文件,发现mapper文件下边是空的, 于是就百度找一下原因,结果说是IDEA ...
- [转]ASP.NET 2.0中GridView无限层复杂表头的实现
本文转自:http://blog.csdn.net/net_lover/article/details/1306211 实现方法就是给单元格填充我们想要的格式代码. C# <%@ Page La ...
- 我的架构设计~用层关系图说说mvc,mvvm,soa,ddd
下面是按着我所接触的架构模式,开始一个一个的说一下 第一 标准架构 三层结构
随机推荐
- centos7 部署ansible
Ansible默认采用SSH的方式管理客户端,基于python开发,由paramiko和PyYAMl 两个关键模块构建 支持非root用户管理,支持sudo ansible作用:通过使用ansible ...
- 019 Linux tcpdump 抓包案例入门可真简单啊?
目录 1 tcpdump 是什么? 2 tcpdump 常用命令参数 3 tcpdump 抓包wss,配合Wireshark分析 4 tcpdump 抓包白度,配合Wireshark分析) 5 tcp ...
- @Async的用法和示例
@Async 注解的用法和示例 目录 @Async 注解的用法和示例 背景 异步调用 @Async介绍 在Spring中启用@Async 示例一:基本使用方式 示例二:在同一个类中调用异步方法 示例三 ...
- 学习linux(centos7)记录的笔记
此随笔用于记录学习<linux鸟哥的私房菜>过程中1.遇到的问题及解决的过程 2.有必要记录的重要内容 3.对应书上操作的记录 开始于2021年6月18号 一个磁盘的分区通过格式化后成为一 ...
- linux shell编程流程控制
条件选择 单分支条件 多分支条件 选择执行if语句 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 f ...
- [BOI2019][第K大问题][暴力剪枝]D2T1 Olympiads
目录 题意 输入格式 输出格式 样例 Input Output 数据范围 时间限制 思路 代码 题意 有\(N\)个人,现在你要从中选出\(K\)个人出来,然后让这\(K\)个人一起参加\(K\)场比 ...
- 01 简介 如何高效的学习Java
JavaSE 千寻简学习笔记 简介 TIOBE:编程语言排行榜 官网:https://hellogithub.com/report/tiobe/ 如何高效的学习Java 多写(代码)多写(笔记)多写( ...
- VTK数据拓扑结构、几何结构和属性数据
读取到VTK数据后,将数据组织起来并添加属性值. 示例: #include <vtkSmartPointer.h> #include <vtkPoints.h> #includ ...
- 合并两个以单链表形式表示的关于x的多项式(基于c语言)
只写函数内部的,不懂得可以看前面一篇文章对链表的实现: pLinklist addBothLinklist(Linklist* first,Linklist* second){ Linklist *n ...
- jdr挖的大坑
计数问题小结 很多计数问题在直接拆分计算贡献时都会出现不容易直接表示的情况.在解决这些问题时,往往需要解决一些子问题方案数的递推, 再套用组合数或者分块计算来降低难度或时间复杂度,这里给出几种递推方法 ...