对于将数据库中的数据处理成树形结构,大致可以分为以下三步:
- 从数据库中获取原始数据
- 将原始数据转化为树形结构数据
- 将树形结构数据渲染到前端页面
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
表,获取到了包含id
、name
、parent_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
类,实现了将原始数据转化为树形结构的功能。具体实现方式是:
- 创建一个空的集合
treeList
,用于存储树形结构数据 - 创建一个Map集合
departmentMap
,用于存储所有部门信息 - 遍历原始数据,如果当前节点的父节点ID为0,则将该节点视为根节点,添加到
treeList
中; - 如果当前节点有父节点,则通过
departmentMap
获取到父节点,将当前节点添加到父节点的子节点集合children
中。 - 最后返回
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技术站