利用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日

相关文章

  • 详解IDEA搭建springBoot方式一(推荐)

    下面是详细讲解 “详解IDEA搭建springBoot方式一(推荐)” 的完整攻略: 一、前置准备 安装JDK和IntelliJ IDEA。 确认本地已经安装了maven,并且配置了maven环境变量。 二、创建Spring Boot项目 打开IntelliJ IDEA,选择Create New Project。 在左侧的“Spring Initializr…

    Java 2023年5月15日
    00
  • java正则表达式验证函数

    下面我将详细讲解“Java正则表达式验证函数”的完整攻略。 什么是正则表达式? 正则表达式是一种文本模式,可用于匹配或搜索文本中的特定模式。它是由一系列字符和元字符组成的表达式,这些字符和元字符可以用来匹配文本中的模式。 Java中的正则表达式 在Java中,正则表达式可以使用java.util.regex包中的类。其中最常用的类是Pattern和Match…

    Java 2023年5月26日
    00
  • JavaWeb入门:ServletContext详解和应用

    JavaWeb入门:ServletContext详解和应用 ServletContext是JavaEE中一个非常重要的Web接口,它代表了Servlet容器提供的一个Web应用程序的环境,可以用来从应用程序中获取初始化参数、获取上下文路径、获取资源路径、记录日志信息等。 ServletContext对象 ServletContext对象是由Servlet容器…

    Java 2023年6月15日
    00
  • 将Java项目打包成可执行的jar包

    将Java项目打包成可执行的jar包可以方便地进行部署和发布,本文将介绍完整的打包流程。 1. 准备工作 在打包之前,需要准备好以下内容: 项目代码 Java开发环境(JDK) 指定项目的入口主类 2. 打包操作 下面就开始具体的打包操作步骤。 2.1 编译项目代码 首先需要将项目代码编译,生成class文件。在命令行中进入项目代码的根目录,执行以下命令: …

    Java 2023年5月26日
    00
  • Java的JSON格式转换库GSON的初步使用笔记

    下面对“Java的JSON格式转换库GSON的初步使用笔记”进行详细讲解。 GSON简介 GSON是谷歌开源的一款Java语言的JSON格式转换库。它能够将Java对象序列化为JSON格式的字符串,同时也能够将JSON格式的字符串反序列化为Java对象。GSON使用简单、高效、安全,广泛应用于Java开发中。 GSON的基本使用 在使用GSON之前,需要先引…

    Java 2023年5月26日
    00
  • java Springboot实现教务管理系统

    下面我将结合一些简单示例,分享一下实现Java Spring Boot教务管理系统的完整攻略。 概述 Java Spring Boot是一个快速开发框架,它可以让我们轻松创建RESTful API应用。教务管理系统是一种基于Web技术的应用程序,可以用于学校的教务管理。Java Spring Boot可以用于构建教务管理系统的后端。 教务管理系统的主要功能包…

    Java 2023年5月19日
    00
  • SpringBoot快速搭建实现三步骤解析

    下面我就为您详细讲解“SpringBoot快速搭建实现三步骤解析”的完整攻略。 1. 准备工作 在开始快速搭建一个Spring Boot应用之前,我们需要先准备好一些工作,包括: JDK 1.8或以上版本 Maven 3.2或以上版本 一个IDE(比如IntelliJ IDEA、Eclipse等) 确保您的开发环境中已经安装了以上组件,并能够正常运行。 2.…

    Java 2023年5月23日
    00
  • jquery easyui 结合jsp简单展现table数据示例

    下面详细讲解“jquery easyui 结合jsp简单展现table数据示例”的完整攻略。 什么是 jQuery EasyUI? jQuery EasyUI 是一个基于 jQuery 的 UI 插件集合,它包含了一些常用的 UI 组件,如:datagrid、tree、panel、window 等,使 Web 开发更加简单和快速。 使用 jQuery Eas…

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