写在前面

最近实现一个小需求,前端需要菜单的信息,需要向后端发起获取菜单的请求,菜单又是一个多级菜单,后端我用的mybatis进行数据库查询,实现的方法我这里想到有两种,欢迎大家补充。

1. 在Menu类中添加属性private List
children

在菜单类中添加一个属性private List<Menu> children 用来存储子节点

package com.example.springbootvue.entity;

import java.io.Serializable;
import java.util.List; import lombok.Data; /**
* sp_permission
* @author
*/
@Data
public class Menu implements Serializable {
private Short psId; /**
* 权限名称
*/
private String psName; /**
* 父id
*/
private Short psPid; /**
* 控制器
*/
private String psC; /**
* 操作方法
*/
private String psA; /**
* 权限等级
*/
private Object psLevel; /**
* 子菜单列表
*/
private List<Menu> children; /**
* null
*/
private String path; private static final long serialVersionUID = 1L;
}

在mapper接口中定义两个方法

package com.example.springbootvue.mapper;

import com.example.springbootvue.entity.Menu;
import org.springframework.stereotype.Service; import java.util.List; @Service
public interface MenuMapper {
/**
* 获取一级菜单
* @param rootMenuId
* @return
*/
Menu getRootMenu(Integer rootMenuId); /**
* 获取子菜单
* @param parentId
* @return
*/
List<Menu> findMenuByParentId(String parentId); }

menuMapper.xml

在resultMap中定义一个collection

    <resultMap id="menuMap" type="com.example.springbootvue.entity.Menu">
<id column="ps_id" jdbcType="SMALLINT" property="psId"/>
<result column="ps_name" jdbcType="VARCHAR" property="psName"/>
<result column="ps_pid" jdbcType="SMALLINT" property="psPid"/>
<result column="ps_c" jdbcType="VARCHAR" property="psC"/>
<result column="ps_a" jdbcType="VARCHAR" property="psA"/>
<result column="ps_level" jdbcType="OTHER" property="psLevel"/>
<result column="path" jdbcType="VARCHAR" property="path"/>
//这是关键语句,对应Menu类中的List<Menu> children字段
<collection property="children" ofType="com.example.springbootvue.entity.Menu"
column="ps_id" select="findMenuByParentId"/>
</resultMap>

这是关键代码,对象Menu类中的List<Menu> children属性

然后在menuMapper.xml实现mapper中的两个方法

    <select id="getRootMenu" resultMap="menuMap" parameterType="integer">
select *
from sp_permission
where ps_id = #{value}
</select> <select id="findMenuByParentId" resultMap="menuMap" parameterType="string">
select *
from sp_permission
where ps_pid = #{value}
</select>

再贴上我数据库的表结构

Mybatis实现多级菜单查询的更多相关文章

  1. oracle 多级菜单查询 。start with connect by prior

    select * from S_dept where CODE in(select sd.code from s_dept sd start with sd.code='GDKB' connect b ...

  2. java生成多级菜单树

    使用java实现一个多级菜单树结构 先上数据库 ps_pid字段很重要,是父级菜单的id Menu类 Menu类要新增一个字段,用来存放子菜单 /** * 子菜单列表 */ private List& ...

  3. 单片机C语言下LCD多级菜单的一种实现方法

    摘要:     介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑.实用的程序模型. 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD 中 ...

  4. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

  5. day1作业二:多级菜单操作(函数实现)

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...

  6. Python多级菜单

    作业2:多级菜单三级菜单可依次选择进入各子菜单所需新知识点:列表.字典 1.流程图 2.登录界面,输入对应索引 #!/usr/bin/env python3 # -*- coding:utf-8 -* ...

  7. day1 作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入b返回上一层,输入q退出整个程序 思路:三级菜单第一级别是省,第二级别是市,第三级别是县,用户 ...

  8. day1作业二:多级菜单

        作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...

  9. MVC+Nhibernate+jquery+easyui递归实现多级菜单

    1.新建访问的控制器动作返回视图,在视图中使用easyui的treegrid插件来得到后台得到的json数据显示多级菜单 public ActionResult Menu() { return Vie ...

随机推荐

  1. VuePress 博客优化之增加 Valine 评论功能

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  2. 【面经】MySql常见问题

    1. 数据库三范式是什么? 1. 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) 2. 第二范式(2NF)是在第一范式(1 ...

  3. Docker容器和虚拟机区别

    Docker .虚拟机之间区别 虚拟机技术的缺点: 1.资源占用太多 2.冗余步骤多 3.启动很慢 容器化技术 1.服务器资源利用率高 2.比较轻量化 3.打包镜像测试,一键运行 比较Docker和虚 ...

  4. 微信Native支付

    微信Native支付对接(扫码) 由于有业务需求对接了微信和paypal支付,这边做个记录 微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index. ...

  5. springWeb——Servlet

    6.1.Servlet简介 servlet是sun公司开发动态web的一门技术 sum在这些API中提供了一个接口叫做:Servlet.开发的两个步骤: 编写一个类,实现Servlet接口 把开发好的 ...

  6. spring——依赖注入的三种方式

    1 构造器注入(与构造器有直接关系) 默认无参构造 3种构造方式:通过<contructor-arg>调用类中的构造器 下标 <bean id="userService&q ...

  7. Fedora 阿里云源

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 简介 Fedora 是一个 Linux 发行版,是一款由全球社区爱好者构建的面向日常应用的快速.稳定.强大的操作系统.它允许任何人自由地使用.修 ...

  8. 问鼎杯预赛web writeup

    1. php的一个精度问题,具体什么精度自己查. 2017.000000000001=2017 2016.999999999999=2017 直接拿谷歌浏览器访问那个链接就可以拿到flag 2. 访问 ...

  9. CF914G Sum the Fibonacci(FWT,FST)

    CF914G Sum the Fibonacci(FWT,FST) Luogu 题解时间 一堆FWT和FST缝合而来的丑陋产物. 对 $ cnt[s_{a}] $ 和 $ cnt[s_{b}] $ 求 ...

  10. js学习笔记-Java script正则表达式

    创建正则表达式 js中的正则包含在两个斜杠之间:/abc+v/ 正则中的特殊字符 \: 1.当后面不是特殊字符时表示字符边界 2.当后面是特殊字符时表示转义 ^: 1.匹配首位,例如,/^A/ 并不会 ...