用递归查树形列表的实现

有一个需求是展示一个树形菜单的功能。之前的都是在mybatis层在<resultMap>里面用<association>关联查询处理,但是如果数据量大的话就有点慢,最近又发现一个递归的思想~~
这个是
这个是测试表结构

dao层就不贴出来啦~
业务层先查所有

@Override
    public ResultData<List<Map>> selAll() {
        ResultData<List<Map>> result = new ResultData<List<Map>>();
        try{
            List<Test> tests = businessSetMapper.findAll();

            List<Map> mapList = findTree(tests, 0);
            result.setData(mapList);
            result.setCode(Sys_Constant.SUCCESS_CODE);
            result.setMsg(Sys_Constant.SUCCESS_MSG);
        } catch (Exception e) {
            result.setCode(Sys_Constant.FAIL_CODE);
            result.setMsg(Sys_Constant.FAIL_MSG);
            e.printStackTrace();
        } finally {
            return result;
        }
    }

再调findTree方法放到map中,在children里面再递归调此方法~

 public List<Map> findTree(List<Test> tests, Integer pId ){
        List<Map> mapList = new ArrayList<>();
        for (Test test : tests) {
            if (test.getPId() != null && test.getPId().equals(pId)) {
                Map map = new HashMap();
                map.put("id",test.getId());
                map.put("name",test.getName());
                map.put("pId",test.getPId());
                map.put("children",findTree(tests,test.getId() ) );
                mapList.add(map);
            }
        }
        return mapList;
    }

postman测试

{
    "code": "0000",
    "data": [
        {
            "children": [
                {
                    "children": [
                        {
                            "children": [],
                            "name": "男",
                            "pId": 2,
                            "id": 3
                        },
                        {
                            "children": [],
                            "name": "女",
                            "pId": 2,
                            "id": 4
                        }
                    ],
                    "name": "性别",
                    "pId": 1,
                    "id": 2
                },
                {
                    "children": [
                        {
                            "children": [],
                            "name": "唱",
                            "pId": 5,
                            "id": 6
                        },
                        {
                            "children": [],
                            "name": "跳",
                            "pId": 5,
                            "id": 7
                        },
                        {
                            "children": [],
                            "name": "rap",
                            "pId": 5,
                            "id": 8
                        }
                    ],
                    "name": "爱好",
                    "pId": 1,
                    "id": 5
                }
            ],
            "name": "分类",
            "pId": 0,
            "id": 1
        }
    ],
    "count": 0,
    "msg": "请求成功!"
}

用这个的话只会查一次数据库,感觉比在xml层处理会好一点吧~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值