JAVA如何把数据库的数据处理成树形结构

对于将数据库中的数据处理成树形结构,大致可以分为以下三步:

  1. 从数据库中获取原始数据
  2. 将原始数据转化为树形结构数据
  3. 将树形结构数据渲染到前端页面

1.从数据库中获取原始数据

我们首先要从数据库中获取原始数据,一般情况下,我们可以通过使用JDBC操作数据库实现该功能。

示例代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JdbcUtil {
    public static Connection getConnection() throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if(rs != null) {
                rs.close();
            }
            if(stmt != null) {
                stmt.close();
            }
            if(conn != null) {
                conn.close();
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

上面的代码是一个简单的JDBC连接数据库的工具类,其中getConnection()方法返回一个数据库连接对象,close()方法用于关闭连接。

示例代码中假设我们的数据库中有一个department表,表结构如下:

CREATE TABLE department (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100),
  parent_id INT
);

我们可以通过执行SQL语句获取原始数据,如下所示:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception{
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtil.getConnection();
            stmt = conn.createStatement();
            String sql = "SELECT id, name, parent_id FROM department";
            rs = stmt.executeQuery(sql);
            List<Department> departmentList = new ArrayList<>();
            while(rs.next()) {
                Department department = new Department();
                department.setId(rs.getInt("id"));
                department.setName(rs.getString("name"));
                department.setParentId(rs.getInt("parent_id"));
                departmentList.add(department);
            }
            System.out.println(departmentList);
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            JdbcUtil.close(conn, stmt, rs);
        }
    }
}

class Department{
    private int id;
    private String name;
    private int parentId;

    //省略getter和setter方法
}

上面的代码中,我们通过查询数据库中的department表,获取到了包含idnameparent_id字段的原始数据,并将其保存在departmentList集合中。

2. 将原始数据转化为树形结构数据

得到了原始数据之后,我们需要对数据进行二次处理,将其转化为树形结构。一般情况下,我们可以使用递归的方式实现转化。

示例代码如下:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TreeUtil {
    //将原始数据转化为树形结构
    public static List<Department> buildTree(List<Department> departmentList) {
        List<Department> treeList = new ArrayList<>();//树形数据集合
        Map<Integer, Department> departmentMap = new HashMap<>();//用于存储所有部门信息的Map集合
        //将所有部门信息保存到Map集合中
        for(Department department : departmentList) {
            departmentMap.put(department.getId(), department);
        }
        //遍历部门信息
        for(Department department : departmentList) {
            if(department.getParentId() == 0) {//根节点
                treeList.add(department);
            }else {
                //获取父节点
                Department parent = departmentMap.get(department.getParentId());
                //将当前节点添加到父节点的子节点集合中
                parent.getChildren().add(department);
            }
        }
        return treeList;
    }
}

class Department{
    private int id;//部门ID
    private String name;//部门名称
    private int parentId;//父节点ID
    private List<Department> children = new ArrayList<>();

    //省略getter和setter方法
}

上面的代码中,我们通过定义一个TreeUtil类,实现了将原始数据转化为树形结构的功能。具体实现方式是:

  1. 创建一个空的集合treeList,用于存储树形结构数据
  2. 创建一个Map集合departmentMap,用于存储所有部门信息
  3. 遍历原始数据,如果当前节点的父节点ID为0,则将该节点视为根节点,添加到treeList中;
  4. 如果当前节点有父节点,则通过departmentMap获取到父节点,将当前节点添加到父节点的子节点集合children中。
  5. 最后返回treeList即可。

3.将树形结构数据渲染到前端页面

得到了树形结构数据之后,我们就可以将其渲染到前端页面了。这里我们可以使用jQuery EasyUI框架中的tree组件。

示例代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Tree Demo</title>
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.9.5/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.9.5/themes/icon.css">
<script type="text/javascript" src="jquery-easyui-1.9.5/jquery.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.9.5/jquery.easyui.min.js"></script>
</head>
<body>
    <ul id="tree"></ul>
</body>
<script type="text/javascript">
$(function(){
    $.ajax({
        url: "tree.json",
        type: "get",
        dataType: "json",
        success: function(data) {
            $('#tree').tree({
                data: data
            });
        }
    });
});
</script>
</html>

在上面的示例代码中,我们通过jQuery EasyUI提供的tree组件,将树形结构数据渲染到了前端页面上。

首先我们在页面中引入了EasyUI的样式和脚本文件;然后,我们通过jQuery提供的ajax方法,向服务器请求需要渲染的树形结构数据(这里假设服务器将树形结构数据以JSON格式返回);最后,我们将返回的树形结构数据通过$('#tree').tree({data: data});的方式渲染到前端页面的一个ul元素中。

至此,我们就完成了将数据库中的数据处理成树形结构的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA如何把数据库的数据处理成树形结构 - Python技术站

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

相关文章

  • Java File类的详解及简单实例

    Java File类的详解及简单实例 简介 Java中的File类是一个用于操作文件和文件夹的类,可以用于检查文件和文件夹的状态、进行文件和文件夹的删除、重命名等操作。File类中包含的方法较多,它与Java IO的输入输出流中的类相互支持,是进行Java操作文件的重要一环。 File类的构造函数 File(String pathname) 用指定的路径na…

    Java 2023年5月20日
    00
  • Tomcat9使用免费的Https证书加密网站的方法

    Tomcat9使用免费的Https证书加密网站的方法 Tomcat9是一款流行的Web应用服务器软件,在进行网站开发时,保障用户数据传输安全是必不可少的,并且在互联网时代中,采用Https协议来保障用户数据传输安全也成为了一种标配。免费的Https证书有Let’s Encrypt和SSL For Free,本文将详细介绍Tomcat9如何使用免费的Https…

    Java 2023年6月2日
    00
  • Java实现简单局域网聊天室

    Java实现简单局域网聊天室攻略 在本文中,我将向您展示如何使用Java语言实现一个简单的局域网聊天室。我们将使用Java的Socket API进行通信。 第一步:创建服务器 我们将从创建服务器开始。服务器将超时等待客户端的连接。一旦客户端连接,服务器将创建一个新的线程对该客户端进行处理。 import java.io.IOException; import…

    Java 2023年5月19日
    00
  • Java简易计算器程序设计

    下面我就给您讲解Java简易计算器程序设计的完整攻略。 1. 确定需求 在开始设计Java简易计算器程序之前,我们需要先明确需求,即我们要实现什么样的功能。在这里,我们可以列出计算器程序的基本功能: 支持基本的加减乘除四则运算 支持小数计算 支持括号功能 2. 设计代码框架 在明确需求之后,我们需要开始设计Java程序的代码框架。我们可以将计算器程序分成以下…

    Java 2023年5月23日
    00
  • Mybatis Plus 增删改查的实现(小白教程)

    MyBatis Plus 是基于 MyBatis 的增强工具,简化了 MyBatis 的使用,提供了很多增强功能。相比于原生 MyBatis,MyBatis Plus 更加易用,使用 MyBatis Plus 可以加快开发效率。本文主要介绍如何使用 MyBatis Plus 进行常见的增删改查操作。 安装 MyBatis Plus 要使用 MyBatis P…

    Java 2023年5月20日
    00
  • 不到30行JS代码实现Excel表格的方法

    如何用少于30行的JS代码实现Excel表格呢?接下来让我们详细讲解一下。 概述 首先,我们需要明确两件事情:一是我们要创建一个表格,二是我们要将表格数据导出为Excel文件。实现这两个功能,需要用到一些JS库和API。 准备工作 在编写JS代码之前,我们需要先安装以下两个JS库: SheetJS:该库可以使我们将表格数据转换为Excel文件。 FileSa…

    Java 2023年6月15日
    00
  • 关于SpringBoot3.x中spring.factories功能被移除的解决方案

    关于SpringBoot3.x中spring.factories功能被移除的解决方案 在SpringBoot 3.x版本中,spring.factories功能被移除了。这个功能在之前的版本中被广泛使用,用于自动配置和扩展SpringBoot应用程序。本文将介绍spring.factories的作用、为什么被移除以及如何解决这个问题。 1. spring.f…

    Java 2023年5月15日
    00
  • Java NegativeArraySizeException异常解决方案

    我将为您讲解解决“Java NegativeArraySizeException异常”的完整攻略。 什么是NegativeArraySizeException异常? 首先,我们需要了解一下NegativeArraySizeException异常。它是Java中的一种运行时异常,当我们使用负数作为数组大小时,就会抛出这个异常。 解决方案 要解决Negative…

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