树形查询 递归实现 Springboot Mybatis-plus

项目需求:上级代理商可以看到自己和下级代理商

方案:利用树形查询,递归实现

数据库表:

在这里插入图片描述

每一行都有id和推荐人id,实现输入name查询本身与下级

在这里插入图片描述

Service层的实现

@Override
    public List<DlsUserTreePO> treeList(int id) {
        List<DlsUserPO> menuList = list();
        List<DlsUserTreePO> result = menuList.stream()
                .filter(menu -> menu.getRefereeId().equals(id))
                .map(menu -> covertMenuNode(menu, menuList)).collect(Collectors.toList());
        return result;
    }

    @Override
    public List<DlsUserTreePO> treeList() {
        List<DlsUserPO> menuList = list();
        List<DlsUserTreePO> result = menuList.stream()
                .filter(menu -> menu.getRefereeId().equals(0))
                .map(menu -> covertMenuNode(menu, menuList)).collect(Collectors.toList());
        return result;
    }

    /**
     * 将UmsMenu转化为UmsMenuNode并设置children属性
     */

    @Override
    public DlsUserTreePO covertMenuNode(DlsUserPO menu, List<DlsUserPO> menuList) {
        DlsUserTreePO node = new DlsUserTreePO();
        BeanUtils.copyProperties(menu, node);
        List<DlsUserTreePO> children = menuList.stream()
                .filter(subMenu -> subMenu.getRefereeId().equals(menu.getId()))
                .map(subMenu -> covertMenuNode(subMenu, menuList)).collect(Collectors.toList());
        node.setChildUser(children);
        return node;
    }

实体类

public class DlsUserTreePO extends DlsUserPO {
    private List<DlsUserTreePO> childUser;
}

Controller层

    @RequestMapping("/treeQuery/{name}")
    @ApiOperation(value = "树形查询推荐人",httpMethod = "POST")
    public R<?> treeQuery(@PathVariable("name") String name){
        int id=dlsUserMapper.selectByName(name);
        DlsUserTreePO dlsUserTreePO=dlsUserService.itself(id);
        List<DlsUserTreePO> dlsUserTreePOS=dlsUserService.treeList(id);
        dlsUserTreePO.setChildUser(dlsUserTreePOS);
        return R.ok(dlsUserTreePO,"查询成功");
    }

    @RequestMapping("/treeQuery")
    @ApiOperation(value = "生成树形",httpMethod = "POST")
    public R<?> treeQuery(){
        List<DlsUserTreePO> dlsUserTreePOS=dlsUserService.treeList();
        return R.ok(dlsUserTreePOS,"查询成功");
    }
   

返回的结果:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现多级菜单可以使用树形结构,可以通过递归实现。以下是一个简单的Java实现多级菜单的示例: 首先定义一个菜单实体类,包含菜单id、父级菜单id、菜单名称、菜单url等属性。 ```java public class Menu { private Long id; private Long parentId; private String name; private String url; // 省略getter和setter方法 } ``` 接着,在菜单服务类中定义一个方法,用于获取所有菜单项,然后递归构建树形结构。 ```java @Service public class MenuService { @Autowired private MenuMapper menuMapper; public List<Menu> getMenuList() { List<Menu> menuList = menuMapper.selectList(null); List<Menu> result = new ArrayList<>(); // 找出所有的根菜单 for (Menu menu : menuList) { if (menu.getParentId() == null) { result.add(menu); } } // 构建树形结构 for (Menu menu : result) { menu.setChildren(getChildren(menu, menuList)); } return result; } private List<Menu> getChildren(Menu parent, List<Menu> menuList) { List<Menu> children = new ArrayList<>(); for (Menu menu : menuList) { if (parent.getId().equals(menu.getParentId())) { children.add(menu); menu.setChildren(getChildren(menu, menuList)); } } return children; } } ``` 在Controller中调用菜单服务类的getMenuList方法,然后将结果返回给前端即可。 ```java @RestController @RequestMapping("/menu") public class MenuController { @Autowired private MenuService menuService; @GetMapping("/list") public List<Menu> getMenuList() { return menuService.getMenuList(); } } ``` 以上代码实现了基于Springboot+Mybatis-plus的多级菜单,前端可以通过递归遍历树形结构来构建菜单。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值