1.mapper
<select id="queryMenuTree" parameterType="String" resultType="com.example.example.vo.MenuTree">
SELECT
menu_id,
menu_name title,
icon,
url href,
target,
parent_id parentId,
menu_level menuLevel
FROM
sys_menu
WHERE
del_flag =0 and visible=0
and parent_id in
<foreach collection="parentIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
2.service层逻辑
public Map<String, Object> menuTree() {
int level =1;
Map<String,Object> map = new HashMap<>();
List<String> idList = new ArrayList<>();
idList.add("0");
menuTreeList = menuMapper.queryMenuTree(idList);
List<MenuTree> parentTreeList = menuTreeList;
List<MenuTree> childs= new ArrayList<>();
for (int i=0;i<=level;i++){
idList = parentTreeList.stream().map(MenuTree::getMenuId).collect(Collectors.toList());//将一级菜单的id全部赋值给idList
if(idList.size()>0){
childs = menuMapper.queryMenuTree(idList);//查询下一层的子菜单
parentTreeList = setChildList(childs,parentTreeList);
level++;
}
}
map.put("menuInfo",menuTreeList);
return map;
}
//
public List<MenuTree> setChildList(List<MenuTree> childs,List<MenuTree> parentMenu){//比较父级和子集数据,将对应的child添加到对应的父级下
if(null!=childs && childs.size()>0){//当下一级菜单不是空的时候
for (MenuTree menuTree:parentMenu) {
List<MenuTree> childList = new ArrayList<>();
for (MenuTree m:childs) {
if (menuTree.getMenuId().equals(m.getParentId())){
childList.add(m);
}
}
menuTree.setChild(childList);
}
}
return childs;
}