文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据库树形结构怎么查 四种方法解决

2023-09-13 05:37

关注

使SQL实现树形查询

1 树形结构固定,即固定几层结构,可以采用数据库连接查询,这里以两张表为例:

select one.id,       one.label,       two.id,       two.labelfrom course_category one         inner join course_category two on two.parentid = one.idwhere one.parentid = '1'  and one.is_show = '1'  and two.is_show = '1'order by one.orderby, two.orderby

2 树形结构可能变化,采用数据库的递归进行查询

with recursive t1 as (select *                      from course_category                      where id = '1'                      union all                      select t2.*                      from course_category t2   inner join t1 on t2.parentid = t1.id)select *from t1order by t1.id, t1.orderby;

Java代码实现

递归查询数据库

    public List findMenu(long parentID) {        QueryWrapper queryWrapper = new QueryWrapper<>();        //查询条件        queryWrapper.eq("parentid", parentID);        //这里传入的值为父节点的id,比如第一次进入网页这里一定是根节点的id 如果点击展开的话就是要展开节点的id 即子节点的父id        List list = baseMapper.selectList(queryWrapper);        for (Menu menu : list) {        //递归子类数据            menu.setChildMenu(findMenu(menu.getID()));        }        return list;    }

一次性全部查询出来,用Java代码实现数据的树形分解

public class TreeDemo{       public static void main(String[] args) {        List treeList = init();        List collect = treeList.stream()                .filter(item -> item.getPid() == 0)//构造最外层节点,即id=0的节点                .map(item -> {                    item.setChildrenList(getChildren(item, treeList));//id=0的节点就为他设置孩子节点                    return item;                }).                collect(Collectors.toList());        System.out.println(new Gson().toJsonTree(collect));    }  //获得孩子节点    private static List getChildren(TreeEntity treeEntity, List treeEntityList) {        List collect = treeEntityList.stream()                .filter(item -> item.getPid().equals(treeEntity.getId()))//判断当前节点的父id是不是要设置节点的id                .map(item -> {                    item.setChildrenList(getChildren(item, treeEntityList));//如果是 为其设置孩子节点 通过递归 为每个除了最外层节点的节点设置孩子节点                    return item;                })                .collect(Collectors.toList());        return collect;    } }

注:以上Java代码粘贴自网络

来源地址:https://blog.csdn.net/weixin_46757028/article/details/130415038

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯