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

这篇具有很好参考价值的文章主要介绍了数据库树形结构怎么查 四种方法解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.使SQL实现树形查询

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

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

2.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 t1
order by t1.id, t1.orderby;

2.Java代码实现

1.递归查询数据库

    public List<Menu> findMenu(long parentID) {
        QueryWrapper queryWrapper = new QueryWrapper<>();
        //查询条件
        queryWrapper.eq("parentid", parentID);
        //这里传入的值为父节点的id,比如第一次进入网页这里一定是根节点的id 如果点击展开的话就是要展开节点的id 即子节点的父id

        List<Menu> list = baseMapper.selectList(queryWrapper);
        for (Menu menu : list) {
        	//递归子类数据
            menu.setChildMenu(findMenu(menu.getID()));
        }
        return list;
    }

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

public class TreeDemo{
       public static void main(String[] args) {
        List<TreeEntity> treeList = init();

        List<TreeEntity> 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<TreeEntity> getChildren(TreeEntity treeEntity, List<TreeEntity> treeEntityList) {
        List<TreeEntity> 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://www.toymoban.com/news/detail-626203.html

到了这里,关于数据库树形结构怎么查 四种方法解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 四种数据库执行脚本文件导入数据的方式

    mysql执行sql脚本文件的方法: 1、在命令行输入mysql -uroot -h10.235.5.55 -p’123456’ -P3306 F:helloniuzi.sql 2、在命令行输入【source F:helloniuzi.sql】 mysql -uroot -h10.235.5.55 -p’123456’ -P3306 -e \\\"source test.sql \\\" test.log psql -Upostgres -dzxin -h10.235.5.55 -p6789 -f test.sql upgrade.log isql -Uzxin_smap -P’123456’

    2024年02月04日
    浏览(36)
  • 数据库MySQL中出现乱码和表格不对齐怎么解决

    MySQL中出现乱码问题及解决办法: 情况类似: 首先进入到数据库中,命令:mysql -h localhost -uroot -p或者mysql -uroot -p;进入数据库后选择一个你的数据库查看表中的中文是否乱码 以上是数据库中表格出现乱码情况,原因可能有以下几种: 字符集是utf-8,不能显示所有的汉字 创建

    2024年02月19日
    浏览(38)
  • 数据库事务的四种隔离级别

    事务 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单元,由一个有限的数据库操作序列构成。——维基百科 简而言之:一系列数据库操作语句组成事务。 数据库事务的隔离级别有四种: 读未提交(Read Uncommitted):事务中的修改可以被其他事务读取,

    2024年02月04日
    浏览(35)
  • mysql数据库limit的四种用法

    mysql数据库中limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目;若果给定一个参数,则表示回记录行的最大

    2024年02月08日
    浏览(39)
  • 大二学科不挂科 速冲方法推荐(数据结构+计组+操作系统+算法+数据库+计网)

    大学计算机专业不挂科 通识课 + 专业课全科目速成总结博客 这段时间本来是紧锣密鼓的在准备面试 原本以为自己已经学过的科目 考试肯定不成问题吧 结果看了看考试的题目 一个都写不了 仿佛回到了大二上学概率论 离散的时候 而且对于计算机专业性学科 这样类型的专业课

    2024年02月07日
    浏览(36)
  • 服务器数据库被.rmallox勒索病毒加密了怎么办?|数据恢复解决方案

    .rmallox 勒索病毒是如何工作的?它如何加密用户的文件,并要求支付赎金?          .rmallox勒索病毒是一种特殊的恶意软件,其主要目的是加密用户的重要文件(如文档、图片、视频等),并要求受害者支付赎金以获取解密密钥。以下是勒索病毒通常的工作方式和加密用

    2024年04月28日
    浏览(35)
  • 数据库四种事务隔离级别的区别以及可能出现的问题

    当两个或多个事务读入同一数据并修改,会发生丢失修改问题,前一个事务修改的结果会被后一事务所做的修改覆盖。 当一个事务修改某个数据后,另一事务对该数据进行了读取,由于某种原因 前一事务撤销 了对该数据的修改,即将修改后的数据恢复原值,相当于没有执行

    2024年02月07日
    浏览(61)
  • 【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年02月04日
    浏览(30)
  • 数据库表结构导出为word、html、markdown【转载,已解决,已验证,开源】

    注:本文为gitcode代码验证,转载gitcode gitcode:https://gitcode.net/mirrors/pingfangushi/screw?utm_source=csdn_github_accelerator 整理数据库文档:https://mp.weixin.qq.com/s/Bo_U5_cl82hfQ6GmRs2vtA

    2024年02月10日
    浏览(26)
  • Oracle数据库协议适配器错误解决方法

    🕺作者: 主页 我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇 码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢支持!!! Oracle协议适配器错误解决办法 ORA-12560: TNS: 协议适配器错误的

    2024年01月22日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包