//方式1:首先按照条件(不同角色展示不同的菜单,权限不同)查询上级菜单id为0的列表(1级菜单),循环得到每个一级菜单id,用一级菜单的id作为parent_id去查询二级菜单,得到每个二级菜单的id,嵌套循环得到每个二级菜单id,查询三级菜单
//不推荐方式1:因为和数据库需要频繁交互,交互次数 = 1 + 一级菜单数量 + 二级菜单数量
//方式2:首先把符合条件的菜单查询出来(列表),通过内存判断筛选出符合条件的记录(每一级的菜单列表)
数据库表结构:
一级菜单的id为0,以id作为下一级菜单的parent_id
public List
//查询下级菜单
private List
这里相当于有4个for循环的嵌套,最外层循环找到一级菜单,然后第二层循环找到一个二级菜单,第三层循环找到一个3级菜单,然后用3级菜单的id作为parentId又进入一个for循环,但是满足不了if中的条件,因为没有下级菜单了,所以又回到上一层for循环,继续找3级菜单,这样就能找到2级菜单下所有的3级菜单,对应的3级菜单都找出来之后,则回退到找2级菜单的循环中,继续找出一个2级菜单,等这个1级菜单对应的2级菜单都找出来之后,则回退到最外层的循环,继续找1级菜单,此时,parentId还是初始的0
最后得到的多级菜单的格式如下:
[
{
“path”: “1”,
“children”: [], //首页没有子菜单
“icon”: “iconHome”,
“linkUrl”: null,
“title”: “首页”
},
{
“path”: “2”,
“children”: [ //二级菜单
{
“path”: “2-1”,
“children”: [ //三级菜单
{
“path”: “2-1-1”,
“children”: [],
“icon”: null,
“linkUrl”: “goods/goods.html”,
“title”: “商品列表”
},
{
“path”: “2-1-2”,
“children”: [],
“icon”: null,
“linkUrl”: “goods/goods_edit.html”,
“title”: “添加商品”
},
{