【JAVA】查询树形结构的数据

1.数据结构:

data: [
	{
	  id: 1,
	  date: '2016-05-02',
	  name: '王小虎1',
	  address: '上海市普陀区金沙江路 1518 弄'
	  children: [{
		  id: 21,
		  date: '2016-05-06',
		  name: '王小虎4',
		  address: '上海市普陀区金沙江路 1519 弄'
		}, {
		  id: 22,
		  date: '2016-05-07',
		  name: '王小虎5',
		  address: '上海市普陀区金沙江路 1519 弄'
	  }]
	}, {
	  id: 2,
	  date: '2016-05-04',
	  name: '王小虎2',
	  address: '上海市普陀区金沙江路 1517 弄'
	  children: [{
		  id: 23,
		  date: '2016-05-08',
		  name: '王小虎6',
		  address: '上海市普陀区金沙江路 1519 弄'
		}, {
		  id: 24,
		  date: '2016-05-09',
		  name: '王小虎7',
		  address: '上海市普陀区金沙江路 1519 弄'
	  }]
	}, {
	  id: 3,
	  date: '2016-05-05',
	  name: '王小虎3',
	  address: '上海市普陀区金沙江路 1519 弄',
	  children: [{
		  id: 25,
		  date: '2016-05-10',
		  name: '王小虎8',
		  address: '上海市普陀区金沙江路 1519 弄'
		}, {
		  id: 26,
		  date: '2016-05-11',
		  name: '王小虎9',
		  address: '上海市普陀区金沙江路 1519 弄'
	  }]
	}
]

2.实现方法

1.引入fastjson的依赖

<!-- fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>
@Override
    public StandardResponse getMenu(GetMenuRequest menuRequest) {
        // 1.查询系统信息,先查询目录然后递归查询目录下面的数据
        LambdaQueryWrapper<SysMenuEntity> wrapper = new QueryWrapper<SysMenuEntity>().lambda()
                .eq(SysMenuEntity::getDelFlg, Constants.ONE)
                .eq(SysMenuEntity::getMenuType, Constants.MENU_TYPE)
                .like(StringUtils.hasLength(menuRequest.getMenuStatus()), SysMenuEntity::getMenuStatus, menuRequest.getMenuStatus())
                .like(StringUtils.hasLength(menuRequest.getMenuName()), SysMenuEntity::getMenuName, menuRequest.getMenuName());
        List<SysMenuEntity> menuList = getBaseMapper().selectList(wrapper);
        // 2.递归查询目录下面的数据
        JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(menuList, SerializerFeature.WriteMapNullValue));
        treeList(jsonArray,menuRequest);
        return StandardResponse.build(Result.QUERY_SUCCESS).setData(jsonArray);
    }

    /**
     * 递归组装树节点数据
     *
     * @param jsonArray
     */
    public void treeList(JSONArray jsonArray,GetMenuRequest menuRequest) {
        for (Object ob : jsonArray) {
            JSONObject jo = (JSONObject)ob;
            LambdaQueryWrapper<SysMenuEntity> queryWrapper = new QueryWrapper<SysMenuEntity>().lambda()
                    .eq(SysMenuEntity::getDelFlg, Constants.ONE)
                    .eq(SysMenuEntity::getParentId, jo.get("id"))
                    .like(StringUtils.hasLength(menuRequest.getMenuStatus()), SysMenuEntity::getMenuStatus, menuRequest.getMenuStatus())
                    .like(StringUtils.hasLength(menuRequest.getMenuName()), SysMenuEntity::getMenuName, menuRequest.getMenuName())
                    ;
            List<SysMenuEntity> childList = getBaseMapper().selectList(queryWrapper);
            if (CollectionUtils.isEmpty(childList)) {
                continue;
            }
            JSONArray childArray = JSON.parseArray(JSON.toJSONString(childList, SerializerFeature.WriteMapNullValue));
            jo.put("children", childArray);
            treeList(childArray,menuRequest);
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值