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

yizhihongxing

下面是关于使用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日

相关文章

  • Java实现的双向匹配分词算法示例

    Java实现的双向匹配分词算法是一种在中文分词中比较常用的算法。下面是完整攻略: 算法原理 双向匹配分词算法是通过正反两个方向分别匹配的方法来确定分词位置的。具体来说,它分别从文本的开头和结尾开始匹配,如果正反两边都匹配到了词,则以较短的那个词为准进行分词;如果其中一边没有匹配到词,则从另一边匹配下一个词。 算法实现 在Java中实现双向匹配分词算法的过程,…

    Java 2023年5月19日
    00
  • Keytool工具的介绍与使用方法

    Keytool工具的介绍与使用方法 Keytool是Java密钥库工具,可用于管理Java密钥库及其内容。在Java中使用密钥库可以实现数字签名、加密/解密、SSL等功能。以下是Keytool工具的介绍与使用方法。 Keytool的主要功能 生成密钥对 管理证书 生成数字证书请求 查看密钥库中条目的详细信息 密钥库中的私钥和证书的关联操作 更改条目密码 更新…

    Java 2023年5月19日
    00
  • java实现批量导入Excel表格数据到数据库

    下面是“Java实现批量导入Excel表格数据到数据库”的完整攻略: 1. 准备工作 在Java中实现批量导入Excel数据到数据库,需要先进行以下准备工作: 导入相关依赖库 配置数据库连接 创建表格对应的实体类 1.1 导入相关依赖库 需要导入以下几个依赖库: <dependencies> <dependency> <grou…

    Java 2023年5月20日
    00
  • Java如何实现可折叠Panel方法示例

    下面是Java如何实现可折叠Panel方法的详细攻略。 什么是可折叠Panel 可折叠Panel指的是一个面板,可以通过单击它的折叠按钮或者拖动它的边缘来展开或折叠。在界面设计中,使用可折叠Panel可以使用户界面更加灵活、紧凑和易于使用。 实现可折叠Panel的方法 要实现一个可折叠Panel,首先需要继承JPanel类,然后添加一个折叠按钮和折叠功能。 …

    Java 2023年5月26日
    00
  • java 中数组初始化实例详解

    Java 中数组初始化实例详解 在 Java 中,我们可以使用数组来存储一组数据。在使用数组时,我们需要先进行初始化。本文将详细介绍 Java 中数组的初始化方法,包括静态初始化和动态初始化。 静态初始化 静态初始化可以初始化数组元素的值,可以使用以下两种方式实现: 直接赋值法 在创建数组时,使用花括号 {} 将初始化的元素放入括号中,并使用逗号 , 分隔每…

    Java 2023年5月26日
    00
  • 在SpringBoot项目中整合拦截器的详细步骤

    在SpringBoot项目中整合拦截器的步骤如下: 1.编写拦截器类和配置类 首先,我们需要编写一个自定义的拦截器类,实现HandlerInterceptor接口并重写其三个方法。接着,需要编写一个配置类,将拦截器注册到Spring容器中,并指定对哪些URL进行拦截。 示例: public class MyInterceptor implements Han…

    Java 2023年5月19日
    00
  • springmvc fastjson 反序列化时间格式化方法(推荐)

    SpringMVC Fastjson 反序列化时间格式化方法 1. 什么是Fastjson? Fastjson是一个Java语言编写的高性能JSON处理器,它可以将Java对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为Java对象。Fastjson具有快速、简单、灵活等特点,是目前Java开发中最流行的JSON处理器之一。 2. Spri…

    Java 2023年5月18日
    00
  • java使用分隔符连接数组中每个元素的实例

    下面我将为你详细讲解Java中使用分隔符连接数组中每个元素的实例,主要包括以下内容: String中的join方法 StringBuilder/StringBuffer 1. String中的join方法 String中的join方法可以方便地将一个数组或集合中的元素以指定的分隔符连接起来。它的语法为: public static String join(C…

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