springBoot中实现多级菜单对象的返回

本文介绍如何在SpringBoot应用中构建具有层级关系的多级菜单对象。通过数据表设计,实体类映射,以及Controller和服务层的交互,详细阐述了如何处理父对象包含子对象的逻辑,其中关键在于利用Pid字段建立父子关系,并在服务层进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果如下:

父对象中有子对象,对象之间有层级关系

 知识储备

在数据表中有一个属性Pid用于储存父id,在java的实体类对象中,有一个List<object> children用于储存父对象下的子对象

核心代码:

通过已获取到的objects列表对象去获得Pid为null的对象

        List<object> parentNodes = objects.stream().filter(o-> o.getPid() == null).collect(Collectors.toList());

是实现该功能:

1.创建数据表

 2.创建实体类表

 


@Getter
@Setter
@TableName("sys_permission")
public class Permission implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 名称
     */
    private String name;

    /**
     * 路径
     */
    private String path;

    /**
     * 顺序
     */
    private Integer orders;

    /**
     * 图标
     */
    private String icon;

    /**
     * 页面路径
     */
    private String page;

    /**
     * 权限
     */
    private String auth;

    /**
     * 父级id
     */
    private Integer pid;

    /**
     * 逻辑删除
     */
    private Integer deleted;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 类型,1目录  2菜单 3按钮
     */
    private Integer type;

    /**
     * 是否隐藏
     */
    private Boolean hide;


    @TableField(exist = false)
    private List<Permission> children;


}

3.controller层

抛出方法,让service层去实现

    //查全部
    @GetMapping
    public Result findAll() {
        return Result.success(permissionService.findChildren());

    }

4.service层(核心)

实现该功能

    @Autowired
    PermissionMapper permissionMapper;

    @Override
    public List<Permission> findChildren() {

        // 查询所有数据
        List<Permission> permissions = permissionMapper.selectList(null);
        // 找出pid为null的一级菜单
        List<Permission> parentNodes = permissions.stream().filter(permission -> permission.getPid() == null).collect(Collectors.toList());

        for ( Permission permission:parentNodes){
            // 筛选所有数据中pid=父级id的数据就是二级菜单
            List<Permission> collect = permissions.stream().filter(permission1 -> permission1.getPid() ==permission.getId()).collect(Collectors.toList());
            //将选出的二级菜单对象写进去
            permission.setChildren(collect);
        }
        return parentNodes;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值