mybatisplus递归传递多个参数 | mybatisplus传递多个参数获取层级数据 | mybatisplus传递多个参数获取树形数据

news/2024/10/19 1:54:04/

搜索关键字:

mybatisplus关联查询传递参数|+"@select"+"树形结构"|+"@select"+"树形结构"+"传参"| +"@select"+"many"+"传参"| +"@select"+"column"+"传参"

1、效果图:

http://localhost:3000/menu/l1

2、接口定义:

关键点:id=id,userID = USER_ID表示参数=数据库列名。

package com.xdy.springboot4vue.mapper;


import com.xdy.springboot4vue.DTO.MenuDTO;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Many;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MenuMapper {

    @Results({
           
@Result(column = "id",property = "ID"),
           
@Result(column = "NAME",property = "NAME"),
           
@Result(column = "CODE",property = "CODE"),
           
@Result(column = "ORDERS",property = "ORDERS"),
           
@Result(column = "URL",property = "URL"),
           
@Result(column = "id=id,userID = USER_ID",property = "children",many = @Many(select = "com.xdy.springboot4vue.mapper.MenuMapper.getMenus"))
    })
   
@Select("SELECT\n" +
           
"\tTBL_MENU.*,TBL_USER_ROLE.USER_ID\n" +
           
"FROM\n" +
            "\ttbl_user\n" +
           
"INNER JOIN TBL_USER_ROLE ON TBL_USER_ROLE.USER_ID = tbl_user.id\n" +
           
"INNER JOIN TBL_ROLE_PRIVILEGE ON TBL_USER_ROLE.ROLE_ID = TBL_ROLE_PRIVILEGE.ROLE_ID\n" +
           
"INNER JOIN TBL_MENU ON TBL_MENU.ID = TBL_ROLE_PRIVILEGE.MENU_ID " +
           
" where tbl_user.id = #{id} and PARENT_ID is null")
   
List<MenuDTO> getCats(Long id);
   
// 获取指定目录的子菜单
    @Results({
           
@Result(column = "id",property = "ID"),
            
@Result(column = "NAME",property = "NAME"),
           
@Result(column = "CODE",property = "CODE"),
           
@Result(column = "ORDERS",property = "ORDERS"),
           
@Result(column = "URL",property = "URL")

    })
   
@Select("SELECT\n" +
           
"\tTBL_MENU.*,TBL_USER_ROLE.USER_ID\n" +
            
"FROM\n" +
            "\ttbl_user\n" +
           
"INNER JOIN TBL_USER_ROLE ON TBL_USER_ROLE.USER_ID = tbl_user.id\n" +
           
"INNER JOIN TBL_ROLE_PRIVILEGE ON TBL_USER_ROLE.ROLE_ID = TBL_ROLE_PRIVILEGE.ROLE_ID\n" +
           
"INNER JOIN TBL_MENU ON TBL_MENU.ID = TBL_ROLE_PRIVILEGE.MENU_ID WHERE PARENT_ID = #{id} and TBL_USER_ROLE.USER_ID=#{userID}  ")
   
List<MenuDTO> getMenus(Long id,Long userID);
}

3、菜单数据库表数据

 

4、DTO定义

package com.xdy.springboot4vue.DTO;


import com.baomidou.mybatisplus.annotation.TableField;

import java.util.List;

public class MenuDTO {
   
private Long ID;
   
private String NAME;
   
private String CODE;
   
private Long ORDERS;
   
private String URL;
   
@TableField(exist = false)
   
private List<MenuDTO> children;
//
省略get\set\toString定义

}

5、控制器定义:

package com.xdy.springboot4vue.controller;

import com.alibaba.fastjson.JSONObject;
import com.xdy.springboot4vue.DTO.MenuDTO;
import com.xdy.springboot4vue.mapper.MenuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping
("/menu")
public class MenuController {

   
@Autowired
   
private MenuMapper menuMapper;

   
@GetMapping("/l1")
   
public JSONObject getMenus(){
       
JSONObject result = new JSONObject();
       
List<MenuDTO> menus = menuMapper.getCats(8L);
       
result.put("data",menus);
       
return  result;
    }

}

参考网址:

https://blog.csdn.net/qq_41047376/article/details/107021244


http://www.ppmy.cn/news/96719.html

相关文章

基于MAX-10 FPGA 超声波测距模块HC_SR04

文章目录 一、介绍超声波测距模块HC_SR04二、模块框图三、模块编写1. 测距信号源2. 距离计算3. 数码管模块4. 顶层模块 四、实验现象总结 一、介绍超声波测距模块HC_SR04 HC-SR04是一种基于超声波的测距模块。该模块向前15度内发送超声波并接收回响&#xff0c;通过发出超声波…

数据结构之排序专题 —— 快速排序原理以及改进方法(添加随机,三路快排)

内容概述 尽管此类博客已经非常非常多&#xff0c;而且也有很多写得很好&#xff0c;但还是想记录一下&#xff0c;用最容易理解的方式&#xff0c;并且多补充了一些例子。 整理云盘的时候发现大一时候的笔记&#xff0c;用的是 txt 文本文件记录的&#xff0c;格式之丑陋可想…

Linux-0.11 boot目录setup.s详解

Linux-0.11 boot目录setup.s详解 模块简介 setup.s用于加载操作系统的一些信息&#xff0c;其主要处理了如下一些事情&#xff1a; 打印硬件信息重新搬运system的位置设置IDT和GDT打开A20地址线切换32位保护模式跳转到system.s中运行 过程详解 打印硬件信息 这里将ds设置…

深入理解Qt对象树内存管理

深入理解Qt对象树内存管理 一、Qt内存管理概述1.1 Qt内存管理的重要性1.2 Qt内存管理的基本原则1.3 Qt内存管理与C内存管理的关系 二、Qt对象树与内存管理&#xff08;Qt Object Tree and Memory Management&#xff09;2.1 Qt对象树的结构&#xff08;Structure of Qt Object …

Linux---phy外设调试(二)

文章目录 一、mdio与rmii/sgmii二、主控mac控制器配置三、phy driver与device的匹配规则 一、mdio与rmii/sgmii 接上一篇文章《Linux—phy外设调试&#xff08;一&#xff09;》&#xff0c;在上一篇中我们说到我们还遗留了几个问题没有解释&#xff0c;其中提到的有mdio总线和…

C#自定义控件:提示未将对象引用设置到对象实例

一、概述 1、当自定义的控件在添加的时候提示&#xff1a;提示未将对象引用设置到对象实例&#xff1b;如下所示&#xff1a; 2、添加上的自定义控件提示&#xff1a;未将对象引用设置到对象实例&#xff1b;如下所示&#xff1a; 二、问题分析 分析1&#xff1a; 在项目中使…

SRP:单一职责原则

系列文章目录 SRP&#xff1a;单一职责原则 系列文章目录1、单一职责原则的定义和解读2、单一职责原则案例解读2.1、违背单一职责原则反面案例2.2、违背单一职责原则反面案例 - 解决方案 3、类的职责是否越细化越好4、如何判断类的职责是否单一5、小结 1、单一职责原则的定义和…

二次元的登录界面

今天还是继续坚持写博客&#xff0c;然后今天给大家带来比较具有二次元风格的登录界面&#xff0c;也只是用html和css来写的&#xff0c;大家可以来看看&#xff01; 个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &…