java 递归实现权限树(菜单树)

public interface MenuDao {

/**

  • 根据父类id查询子类菜单

  • @param pid

  • @return

*/

List

selectByPid(Integer pid);

/**

  • 查询所有的菜单

  • @return

*/

List

selectAll();

/**

  • 查询除了一级菜单以外的菜单

  • @return

*/

List

selectAllNotBase();

}

复制代码

  1. mapper文件
<?xml version="1.0" encoding="UTF-8" ?>

SELECT * FROM menu WHERE pid=#{pid}

SELECT * FROM menu

SELECT * FROM menu where pid!= 0

复制代码

  1. Controller层(由于是查询操作,并且没有复杂的操作,偷个懒就不写service层)

@RestController

@RequestMapping(“mymenu”)

public class MenuController {

@Autowired

private MenuDao menuDao;

@RequestMapping(“/getMenuTree”)

public List

getMenuTree(){

List

menusBase = menuDao.selectByPid(0);

List

menuLNotBase = menuDao.selectAllNotBase();

for (Menu menu : menusBase) {

List

menus = iterateMenus(menuLNotBase, menu.getId());

menu.setMenuChildren(menus);

}

return menusBase;

}

/**

*多级菜单查询方法

  • @param menuVoList 不包含最高层次菜单的菜单集合

  • @param pid 父类id

  • @return

*/

public List

iterateMenus(List menuVoList,String pid){

List

result = new ArrayList ();

for (Menu menu : menuVoList) {

//获取菜单的id

String menuid = menu.getId();

//获取菜单的父id

String parentid = menu.getPid();

if(StringUtils.isNotBlank(parentid)){

if(parentid.equals(pid)){

//递归查询当前子菜单的子菜单

List

iterateMenu = iterateMenus(menuVoList,menuid);

menu.setMenuChildren(iterateMenu);

result.add(menu);

}

}

}

return result;

}

}

复制代码

  1. 启动程序用postman进行测试:

在这里插入图片描述

返回的json数据如下:

[

{

“id”: “1”,

“name”: “主菜单1”,

“pid”: “0”,

“menuChildren”: [

{

“id”: “4”,

“name”: “子菜单1.1”,

“pid”: “1”,

“menuChildren”: [

{

“id”: “6”,

“name”: “子菜单1.1.1”,

“pid”: “4”,

“menuChildren”: []

},

{

“id”: “9”,

“name”: “子菜单1.1.2”,

“pid”: “4”,

“menuChildren”: []

}

]

},

{

“id”: “5”,

“name”: “子菜单1.2”,

“pid”: “1”,

“menuChildren”: []

}

]

},

{

“id”: “2”,

“name”: “主菜单2”,

“pid”: “0”,

“menuChildren”: [

{

“id”: “7”,

“name”: “子菜单2.1”,

“pid”: “2”,

“menuChildren”: []

},

{

“id”: “8”,

“name”: “子菜单2.2”,

“pid”: “2”,

“menuChildren”: []

}

]

},

{

“id”: “3”,
“name”: “主菜单3”,
“pid”: “0”,
“menuChildren”: []
}
]

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

加入社区:https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0
主菜单3",
“pid”: “0”,
“menuChildren”: []
}
]

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

[外链图片转存中…(img-bwv5dXfN-1725473011335)]

[外链图片转存中…(img-s8i5XwWX-1725473011336)]

加入社区:https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值