java 查询数据库并生成多层children

首先,定义一个表示组织结构的简单类:

public class Organization {
    private int id;
    private int parentId;
    private String name;
    private List<Organization> children;
 
    // 省略构造函数、getter和setter
}

然后,编写一个方法来查询数据库并构建多层嵌套的children列表:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
 
public class OrganizationService {
 
    public List<Organization> getOrganizationHierarchy(int rootId) throws Exception {
        List<Organization> organizations = new ArrayList<>();
        try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdatabase", "username", "password");
             PreparedStatement pstmt = conn.prepareStatement("SELECT id, parent_id, name FROM organization WHERE parent_id = ?");
             ResultSet rs = pstmt.executeQuery()) {
            
            while (rs.next()) {
                Organization organization = new Organization();
                organization.setId(rs.getInt("id"));
                organization.setParentId(rs.getInt("parent_id"));
                organization.setName(rs.getString("name"));
                organization.setChildren(getChildren(organization.getId(), conn)); // 递归获取子组织
                organizations.add(organization);
            }
        }
        return organizations;
    }
 
    private List<Organization> getChildren(int parentId, Connection conn) throws Exception {
        List<Organization> children = new ArrayList<>();
        try (PreparedStatement pstmt = conn.prepareStatement("SELECT id, parent_id, name FROM organization WHERE parent_id = ?");) {
            pstmt.setInt(1, parentId);
            try (ResultSet rs = pstmt.executeQuery()) {
                while (rs.next()) {
                    Organization child = new Organization();
                    child.setId(rs.getInt("id"));
                    child.setParentId(rs.getInt("parent_id"));
                    child.setName(rs.getString("name"));
                    child.setChildren(getChildren(child.getId(), conn)); // 递归获取子组织的子组织
                    children.add(child);
                }
            }
        }
        return children;
    }
}

在这个例子中,getOrganizationHierarchy 方法用于获取根节点的组织层级结构,而 getChildren 方法用于递归地获取一个组织的所有子组织。注意,这里假设你已经有了JDBC驱动和数据库配置信息,并且数据库中有一个名为 organization 的表,其中包含 idparent_id 和 name 字段。

posted @ 2024-08-24 10:27  Liu66~  阅读(17)  评论(0编辑  收藏  举报