利用java+mysql递归实现拼接树形JSON列表的方法示例

下面是关于使用Java和MySQL递归生成树形JSON列表的攻略。

核心思路

树形结构实际上是一种递归结构,我们可以利用递归的思想来实现树形结构的生成。具体步骤如下:

  1. 从数据库中查询出所有的节点,包括节点的id、pid、name等信息;
  2. 创建根节点,将根节点放入节点列表中;
  3. 遍历节点列表,如果该节点的pid等于根节点的id,将该节点加入根节点的子节点中;
  4. 递归遍历该节点的子节点列表,加入子节点的子节点等,直到该节点的子节点为空为止;
  5. 将根节点转换为JSON格式的字符串。

代码实现

实体类

Java实体类主要包括节点的id、pid、name等信息。以Node实体类为例:

public class Node {
    private Integer id;
    private Integer pid;
    private String name;

    // 构造函数、Getter和Setter方法省略
}

数据库操作

MySQL数据库中的表结构如下:

CREATE TABLE `node` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `pid` int(11) unsigned DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

在Java中,我们使用JDBC操作MySQL数据库,建立连接、查询和关闭连接的代码如下:

public static Connection getConnection() throws SQLException {
    String url = "jdbc:mysql://localhost:3306/test";
    String username = "root";
    String password = "123456";
    return DriverManager.getConnection(url, username, password);
}

public static void closeConnection(Connection conn, Statement stmt, ResultSet rs) throws SQLException {
    if (rs != null) {
        rs.close();
    }

    if (stmt != null) {
        stmt.close();
    }

    if (conn != null) {
        conn.close();
    }
}

public static List<Node> findAll() throws SQLException {
    List<Node> nodeList = new ArrayList<>();
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    try {
        conn = getConnection();
        stmt = conn.prepareStatement("SELECT * FROM node");
        rs = stmt.executeQuery();

        while (rs.next()) {
            Node node = new Node();
            node.setId(rs.getInt("id"));
            node.setPid(rs.getInt("pid"));
            node.setName(rs.getString("name"));
            nodeList.add(node);
        }
    } finally {
        closeConnection(conn, stmt, rs);
    }

    return nodeList;
}

递归生成JSON

利用以上代码,我们可以查询出数据库中所有的节点集合。接下来我们需要利用递归的方式生成JSON字符串,代码如下:

public static String generateJson(Integer nodeId, List<Node> nodeList) {
    List<Node> childNodes = getChildNodes(nodeId, nodeList);
    StringBuilder sb = new StringBuilder();

    if (!childNodes.isEmpty()) {
        sb.append("[");
        for (Node node : childNodes) {
            sb.append("{");
            sb.append("\"id\":\"").append(node.getId()).append("\",");
            sb.append("\"name\":\"").append(node.getName()).append("\",");
            sb.append("\"children\":").append(generateJson(node.getId(), nodeList));
            sb.append("},");
        }
        sb.deleteCharAt(sb.length() - 1);
        sb.append("]");
    }

    return sb.toString();
}

public static List<Node> getChildNodes(Integer nodeId, List<Node> nodeList) {
    List<Node> childNodes = new ArrayList<>();
    for (Node node : nodeList) {
        if (node.getPid() != null && node.getPid().equals(nodeId)) {
            childNodes.add(node);
        }
    }
    return childNodes;
}

以上代码的generateJson方法接收一个节点id和节点列表,返回该节点的子节点列表生成的JSON字符串。如果该节点没有子节点,返回空字符串。getChildNodes方法接收一个节点id和节点列表,返回该节点的子节点列表。

完整示例请见下面两个示例。

示例一

以以下数据库中的数据为例:

id pid name
1 null root
2 1 node1
3 1 node2
4 2 node3
5 null node4
6 4 node5

调用方法如下:

List<Node> nodeList = findAll();
String json = generateJson(1, nodeList);
System.out.println(json);

输出结果如下:

[
    {
        "id":"2",
        "name":"node1",
        "children":[
            {
                "id":"4",
                "name":"node3",
                "children":[
                    {
                        "id":"6",
                        "name":"node5",
                        "children":[]
                    }
                ]
            }
        ]
    },
    {
        "id":"3",
        "name":"node2",
        "children":[]
    }
]

示例二

以以下数据库中的数据为例:

id pid name
1 null root
2 1 node1
3 1 node2
4 2 node3
5 null node4
6 4 node5
7 3 node6

调用方法如下:

List<Node> nodeList = findAll();
String json = generateJson(1, nodeList);
System.out.println(json);

输出结果如下:

[
    {
        "id":"2",
        "name":"node1",
        "children":[
            {
                "id":"4",
                "name":"node3",
                "children":[
                    {
                        "id":"6",
                        "name":"node5",
                        "children":[]
                    }
                ]
            }
        ]
    },
    {
        "id":"3",
        "name":"node2",
        "children":[
            {
                "id":"7",
                "name":"node6",
                "children":[]
            }
        ]
    }
]

以上即为利用Java和MySQL递归生成树形JSON列表的完整攻略和示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用java+mysql递归实现拼接树形JSON列表的方法示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • SpringBoot Service和Dao的编写详解

    针对 “SpringBoot Service 和 Dao 的编写详解” ,下面是完整的攻略: 1. 什么是 SpringBoot Service 和 Dao 在开发 Web 应用程序时,我们通常会遵循 MVC 的设计模式。其中 Service 和 Dao 层属于模型层的一部分,分别负责业务处理和数据访问。 SpringBoot Service 层主要负责业务…

    Java 2023年5月15日
    00
  • 记录一次非常麻烦的调试

    此次记录一次非常麻烦的调试问题,不是纯知识分享,只是记录这次调试过程引以为戒。 问题简介 这个功能是公司2021年写的老功能,一直都没有更新过代码,这次在导入一个1.03G的大文件进行读取的过程中出问题了。简单介绍一下这个功能:公司使用的spring boot框架构建项目,该功能为项目内的一个接口调用功能。该功能首先,通过远程接口下载文件到局域网sftp服务…

    Java 2023年5月5日
    00
  • 初识Spring Boot框架和快速入门

    下面我就来详细讲解“初识SpringBoot框架和快速入门”的完整攻略。 一、什么是Spring Boot? Spring Boot是一个开源的框架,它是基于Spring 框架的基础上创建的一个快速开发的框架。它封装了大量的Spring框架相关的组件和工具,简化了Spring应用的初始化和开发过程,大大提高了开发效率和开发体验。 二、Spring Boot的…

    Java 2023年5月15日
    00
  • Java异常处理的五个关键字

    下面是“Java异常处理的五个关键字”的攻略: 异常处理的概念 Java 异常处理是一种机制,用于检测和处理代码中出现的错误或异常情况。当程序出现异常时,异常处理机制会终止当前的程序执行,并将异常信息传递给上层的代码,以便进行处理。 五个关键字 1. try try 语句块用于包含可能会抛出异常的代码。通常情况下,try 语句块后面会跟一个或多个 catch…

    Java 2023年5月27日
    00
  • 详解Spring Boot实战之Rest接口开发及数据库基本操作

    下面为您详细讲解“详解Spring Boot实战之Rest接口开发及数据库基本操作”的完整攻略。 1. 背景介绍 在Web开发中,RESTful API是一种非常流行的架构风格,它能够提供简单、易用、灵活的接口服务。而Spring Boot作为一个现代化的Java Web框架,则能够非常好地实现RESTful API的开发。 本攻略将为您介绍如何使用Spri…

    Java 2023年5月19日
    00
  • java实现网上购物车程序

    为了实现网上购物车程序,需要遵循以下步骤: 1. 设计数据库结构 网上购物车程序需要一个数据库来存储用户数据和商品数据,因此需要首先设计好数据库结构,并创建相应的数据表,保证程序的正常使用。 以下是一个简化版的数据库结构示例: user表 字段名 类型 默认值 描述 id int PRIMARY KEY 用户ID username varchar(50) N…

    Java 2023年5月19日
    00
  • java-list创建的两种常见方式

    下面是Java中使用List创建的两种常见方式的详细解释和示例: 1. 使用ArrayList类创建List对象 ArrayList是Java中最常用的List实现类之一,它提供了一个可以自动扩容的动态数组,可以存储任何类型的对象。ArrayList的构造方法和内置方法都很简单,可以快速轻松地创建和操作List对象。 创建ArrayList对象 使用Arra…

    Java 2023年5月26日
    00
  • Apache和Tomcat有什么区别_动力节点Java学院整理

    Apache和Tomcat有什么区别_动力节点Java学院整理 简介 Apache和Tomcat都是常见的Java Web服务器。它们的区别在于它们的作用以及它们处理请求的方式。Apache是一个Web服务器,它通过HTTP和HTTPS协议分发静态文件和动态文件,而Tomcat是一个Servlet容器,它只能在动态资源请求时运行Servlet。在实际应用开发…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部