java 查询一个用户并且显示他的部门树结构

时间: 2024-02-02 20:04:07 浏览: 27
首先需要明确的是,部门树结构是由部门之间的上下级关系构成的,而一个用户只属于一个部门,因此查询用户并显示其所在的部门树结构需要分两步进行: 1. 查询用户所在的部门 2. 根据部门的上下级关系构建部门树结构,并将用户所在的部门及其祖先部门一起显示出来 下面是一个示例代码,假设有如下的部门表: | id | name | parent_id | | ---- | -------- | --------- | | 1 | 公司 | null | | 2 | 技术部 | 1 | | 3 | 开发组 | 2 | | 4 | 测试组 | 2 | | 5 | 市场部 | 1 | | 6 | 销售组 | 5 | 以及如下的用户表: | id | name | department_id | | ---- | ------ | ------------- | | 1 | 张三 | 3 | | 2 | 李四 | 4 | | 3 | 王五 | 6 | 代码如下: ```java import java.sql.*; import java.util.*; public class UserDepartmentTree { private static final String DB_URL = "jdbc:mysql://localhost:3306/test"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "root"; public static void main(String[] args) { try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) { // 查询用户所在的部门 String queryUserSql = "SELECT u.name, d.id, d.name AS department_name, d.parent_id FROM user u JOIN department d ON u.department_id = d.id WHERE u.id = ?;"; PreparedStatement queryUserStmt = conn.prepareStatement(queryUserSql); queryUserStmt.setInt(1, 1); // 假设查询用户id为1 ResultSet userResult = queryUserStmt.executeQuery(); if (!userResult.next()) { System.out.println("User not found!"); return; } String userName = userResult.getString("name"); int departmentId = userResult.getInt("id"); String departmentName = userResult.getString("department_name"); int parentDepartmentId = userResult.getInt("parent_id"); // 根据部门的上下级关系构建部门树结构 String queryDepartmentSql = "SELECT id, name, parent_id FROM department;"; Statement queryDepartmentStmt = conn.createStatement(); ResultSet departmentResult = queryDepartmentStmt.executeQuery(queryDepartmentSql); Map<Integer, Department> departmentMap = new HashMap<>(); while (departmentResult.next()) { int id = departmentResult.getInt("id"); String name = departmentResult.getString("name"); int parentId = departmentResult.getInt("parent_id"); departmentMap.put(id, new Department(id, name, parentId)); } Department department = departmentMap.get(departmentId); List<String> departmentNames = new ArrayList<>(); departmentNames.add(department.getName()); while (department.getParentId() != 0) { department = departmentMap.get(department.getParentId()); departmentNames.add(0, department.getName()); } // 将用户所在的部门及其祖先部门一起显示出来 StringBuilder sb = new StringBuilder(); sb.append(userName).append("所在的部门:"); for (String name : departmentNames) { sb.append(name).append(" -> "); } sb.delete(sb.length() - 4, sb.length()); System.out.println(sb.toString()); } catch (SQLException e) { e.printStackTrace(); } } static class Department { private int id; private String name; private int parentId; public Department(int id, String name, int parentId) { this.id = id; this.name = name; this.parentId = parentId; } public int getId() { return id; } public String getName() { return name; } public int getParentId() { return parentId; } } } ``` 执行结果: ``` 张三所在的部门:公司 -> 技术部 -> 开发组 ```

相关推荐

最新推荐

recommend-type

Oracle递归树形结构查询功能

oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形结构查询功能,需要的朋友参考下
recommend-type

java、js中实现无限层级的树形结构方法(类似递归)

下面小编就为大家带来一篇java、js中实现无限层级的树形结构方法(类似递归)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

Java递归算法构造JSON树形结构

Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
recommend-type

java利用递归调用实现树形菜单的样式

主要给大家介绍了关于java利用递归调用实现树形菜单样式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

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

主要给大家介绍了关于利用java+mysql递归实现拼接树形JSON列表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。