作者:823825lml | 来源:互联网 | 2023-10-10 18:24
Java多级菜单排序并返回树结构菜单列表
- 前言
- 一、数据表
- 二、Java实体
- 三、Service层
- 四、结果
- 总结
前言
SpringBoot+MybatisPlus 对数据表中的菜单进行排序并返回树形Json格式的菜单列表
一、数据表
菜单表:t_menu
字段说明:name:菜单名称; status:1表示启用,表示停用; level:菜单级别说明; parent_id:父级菜单id,0表示一级菜单; sort_order:排序序号
二、Java实体
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_menu")
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id")
private String id;
@JSONField(ordinal = 1)
private String name;
@JSONField(ordinal = 2)
private Boolean status;
@JSONField(ordinal = 3)
private String level;
@JSONField(ordinal = 4)
private String parentId;
@JSONField(ordinal = 5)
private Integer sortOrder;
@JSONField(ordinal = 6)
@TableField(exist = false)
private List<Menu> children;
}
三、Service层
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
@Override
public List<Menu> getMenu() {
List<Menu> allMenu = baseMapper.selectList(null);
return allMenu.stream()
.filter(item -> item.getParentId().equals("0"))
.map(item -> item.setChildren(getChild(item.getId(), allMenu)))
.sorted(Comparator.comparingInt(menu -> (menu.getSortOrder() == null ? 0 : menu.getSortOrder())))
.collect(Collectors.toList());
}
private List<Menu> getChild(String id, List<Menu> allMenu) {
return allMenu.stream()
.filter(item -> item.getParentId().equals(id))
.map(item -> item.setChildren(getChild(item.getId(), allMenu)))
.sorted(Comparator.comparingInt(menu -> (menu.getSortOrder() == null ? 0 : menu.getSortOrder())))
.collect(Collectors.toList());
}
}
四、结果
{
"code": 2000,
"data": [
{
"id": "1402904218656530433",
"name": "位置管理",
"status": true,
"level": "一级菜单",
"parentId": "0",
"sortOrder": 0,
"children": []
},
{
"id": "1402904118723043329",
"name": "日志管理",
"status": true,
"level": "一级菜单",
"parentId": "0",
"sortOrder": 5,
"children": [
{
"id": "1402905060906328066",
"name": "查看日志",
"status": true,
"level": "二级菜单",
"parentId": "1402904118723043329",
"sortOrder": 0,
"children": []
}
]
},
{
"id": "1402903753264885762",
"name": "用户管理",
"status": true,
"level": "一级菜单",
"parentId": "0",
"sortOrder": 7,
"children": [
{
"id": "1402904547628376065",
"name": "账号管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 5,
"children": []
},
{
"id": "1402904663936425985",
"name": "权限管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 12,
"children": [
{
"id": "1402904949253955585",
"name": "修改权限",
"status": true,
"level": "三级菜单",
"parentId": "1402904663936425985",
"sortOrder": 2,
"children": []
},
{
"id": "1402904920229371906",
"name": "添加权限",
"status": true,
"level": "三级菜单",
"parentId": "1402904663936425985",
"sortOrder": 10,
"children": [
{
"id": "1402922502042918914",
"name": "测试一",
"status": true,
"level": "四级菜单",
"parentId": "1402904920229371906",
"sortOrder": 0,
"children": []
},
{
"id": "1402922463040086018",
"name": "测试二",
"status": true,
"level": "四级菜单",
"parentId": "1402904920229371906",
"sortOrder": 4,
"children": []
}
]
},
{
"id": "1402904973903880194",
"name": "删除权限",
"status": true,
"level": "三级菜单",
"parentId": "1402904663936425985",
"sortOrder": 10,
"children": []
}
]
},
{
"id": "1402904645955444738",
"name": "角色管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 14,
"children": []
},
{
"id": "1402904723365519361",
"name": "菜单管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 30,
"children": []
}
]
}
],
"date": 1623480149457,
"msg": "success",
"success": true
}
总结
如果这篇博客对你有帮助的话,记得给我点个赞,你的鼓励是对我最大的支持!谢谢。◕‿◕。