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实现系统捕获异常发送邮件案例

    这里为您提供java实现系统捕获异常发送邮件的完整攻略。 1. 引入依赖 首先,在你的项目中需要引入邮件发送相关的依赖,例如Apache Commons Email等。如果你使用Maven进行依赖管理,可以添加以下依赖: <dependency> <groupId>org.apache.commons</groupId> …

    Java 2023年5月27日
    00
  • IntelliJ IDEA使用maven实现tomcat的热部署

    下面是IntelliJ IDEA使用maven实现tomcat的热部署的完整攻略: 一、前置条件 已经安装好IntelliJ IDEA和Apache Maven,并且配置好了环境变量。 已经配置好了Tomcat服务器。 准备好要开发的Java Web项目。 二、pom.xml配置 在项目根目录下的pom.xml文件中添加以下内容: <build>…

    Java 2023年5月19日
    00
  • GC日志的作用是什么?

    GC日志记录了JVM的垃圾回收情况,它可以用于以下方面: 监控应用程序的垃圾回收情况,包括垃圾回收的频率、GC暂停时间、堆大小等信息,以便我们调优应用程序。 检测内存泄漏问题,比如频繁Full GC、对象存活时间过长等问题,通过GC日志中的统计数据,我们可以发现这些问题,并进行排查。 使用GC日志的步骤如下: 启用GC日志 通过以下JVM参数启用GC日志:-…

    Java 2023年5月10日
    00
  • 持久层ORM框架Hibernate框架的使用及搭建方式

    下面是详细的攻略: 什么是Hibernate? Hibernate是一种采用对象关系映射(Object Relational Mapping, ORM)概念的持久性框架。Hibernate的目标是在Java平台上提供一个简单、高效的持久性解决方案。使用Hibernate可以极大地简化数据访问层的编写,同时也可以提供相当高的性能和可靠性。 Hibernate的…

    Java 2023年5月19日
    00
  • Java中static静态变量的初始化完全解析

    Java中static静态变量的初始化完全解析 在Java中,静态变量(static变量)是独立于对象的变量,它们在类被加载时就被初始化,而不是在每次创建对象时都被初始化。本文将详细介绍Java中静态变量的初始化过程。 静态变量的初始化时机 静态变量是在类加载时被初始化的,具体包括以下3种情况: 类的静态变量在类加载时就初始化 在类的静态变量成员所在的类被初…

    Java 2023年5月26日
    00
  • MyBatis一对一映射初识教程

    MyBatis一对一映射初识教程 什么是一对一映射? 一对一映射是ORM框架MyBatis中非常重要的概念之一。顾名思义,一对一映射就是一张表中的一行数据与另一张表中的一行数据建立一一对应的关系,也就是说我们从这两张表中查到的数据都是一对一的。在MyBatis中,实现一对一映射的方式是通过两个实体类之间的关联关系来完成的。 一对一映射的实现 在MyBatis…

    Java 2023年5月20日
    00
  • Spring Security 强制退出指定用户的方法

    下面是关于“Spring Security 强制退出指定用户的方法”的攻略: 一、背景知识 首先需要了解一下Spring Security的基础知识。 Spring Security是一个基于Spring框架的安全框架,主要用于保护Web应用程序中的安全性。它提供了诸如身份验证、授权、攻击防护等安全功能,可以轻松添加到现有的Spring应用程序中。 在Spr…

    Java 2023年5月20日
    00
  • 浅谈在Java中JSON的多种使用方式

    浅谈在Java中JSON的多种使用方式 什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,其来源于JavaScript. 通常用于将结构化数据序列化为文本格式,可以轻松地在不同的系统中传递、存储和分析数据. JSON将数据表达为键值对的集合,具有易于阅读和编写的文本格式,易于机器解析和生成,并且良好…

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