在数据库中存储着这样的一张表:

在查询的时候,username2为空为领导,他没有上级。通过username获取名称,然后通过获取的名称查询username2,来查询谁是名称的下级。例如:通过username获取wx数据,然后根据wx查询username2,获取两条数据,分别是username为:wx1和wx4.。依此类推,将所有数据上下级关系查询出来。

这里使用spring中jdbcTemplate来查询数据

1. 导入jar包

2 创建配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.wx"/><!-- org\springframework\jdbc\datasource\DriverManagerDataSource.class --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!-- oracle配置 --><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@localhost:1521:idts"/><!-- mysql配置 --><!-- <property name="driverClassName" value="jdbc:mysql://127.0.0.1/student" /><property name="url" value="com.mysql.jdbc.Driver"></property> --><property name="username" value="spring"/><property name="password" value="spring"/></bean><!-- org\springframework\jdbc\core\JdbcTemplate.class --><bean id= "jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><tx:annotation-driven transaction-manager="transactionManager"/></beans>

3 .编写java代码

package com.wx.dao;import java.util.List;
import java.util.Map;import com.wx.domain.Account;public interface AccountDao {//查询所有的信息public List<Map<String,Object>> findAllAccount();//查询UserName2的信息public List<Map<String,Object>> findUserName2(String username2);
}
package com.wx.dao.impl;import java.util.List;
import java.util.Map;import javax.annotation.Resource;import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.wx.dao.AccountDao;
import com.wx.domain.Account;@Repository("accountDao")
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED)
public class AccountDaoImpl implements AccountDao {@Resource(name="jdbcTemplate")private JdbcTemplate jdbcTemplate;@Overridepublic List<Map<String, Object>> findAllAccount() {// TODO Auto-generated method stubString sql = "select * from account";RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);return jdbcTemplate.queryForList(sql,new Object[]{});}@Overridepublic List<Map<String,Object>> findUserName2(String username2) {// TODO Auto-generated method stubString sql = "select * from account where username2=?";RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);List<Map<String,Object>> account = this.jdbcTemplate.queryForList(sql, new Object[]{username2});return account;}
}
package com.wx.service;import java.util.List;
import java.util.Map;import com.wx.domain.Account;public interface AccountService {//查询所有的信息public List<Map<String,Object>> findAllAccount();//查询UserName2的信息public List<Map<String, Object>> findUserName2(String username2);
}
package com.wx.service.impl;import java.util.List;
import java.util.Map;import javax.annotation.Resource;import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;import com.wx.dao.AccountDao;
import com.wx.domain.Account;
import com.wx.service.AccountService;@Service("accountService")
public class AccountServiceImpl implements AccountService {@Resource(name = "accountDao")private AccountDao accountDao;@Overridepublic List<Map<String, Object>> findAllAccount() {// TODO Auto-generated method stubreturn accountDao.findAllAccount();}@Overridepublic List<Map<String, Object>> findUserName2(String username2) {// TODO Auto-generated method stubreturn this.accountDao.findUserName2(username2);}}
package com.wx.test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;import com.wx.domain.Account;
import com.wx.service.AccountService;public class MyTest {ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");AccountService accountService = (AccountService)application.getBean("accountService");public static void main(String[] args){MyTest myTest = new MyTest();System.out.println(myTest.test());
//      myTest.getAccountTree("");}public List<Map<String, Object>> test(){//查询所有数据List<Map<String, Object>>  lists = accountService.findAllAccount();//遍历每一条数据for(int i = 0; i < lists.size(); i++){Map<String,Object> map = lists.get(i);String username = (String)map.get("USERNAME");//查询每条数据的所有叶子节点List<Map<String, Object>>  listsByUserName2 = accountService.findUserName2(username);//判断每一条数据是否有叶子节点if(listsByUserName2.size()>0){map.put("children", getAccountTree(username));}}return lists;}public List<Map<String,Object>> getAccountTree(String username){List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();//根据username查询它的子节点List<Map<String, Object>>  listsByUserName2 = accountService.findUserName2(username);if(listsByUserName2.size() > 0){for(int i = 0; i < listsByUserName2.size(); i++){Map<String,Object> map = listsByUserName2.get(i);List<Map<String,Object>> listsByUserName3 = accountService.findUserName2((String)map.get("USERNAME"));if(listsByUserName3.size()>0){map.put("children", getAccountTree((String)map.get("USERNAME")));} }}return listsByUserName2;}}

4. 结果

[    {ID=sadfasdffcdsafasdfasdfasdfdsafcasdfsdaf, USERNAME=wx4, BALANCE=12222, USERNAME2=wx}, {  ID=75BD28315C3C4DA48B085D76243B045E, USERNAME=wx, BALANCE=12000, USERNAME2=null, children=[ {ID=sadfasdffcdsafasdfasdfasdfdsafcasdfsdaf, USERNAME=wx4, BALANCE=12222, USERNAME2=wx}, {ID=E3F657DEAD01492A9D5265B60EB88DA6, USERNAME=wx1, BALANCE=9000, USERNAME2=wx, children=[ {ID=DA403914A5014D9699EA07789C5F978F, USERNAME=wx2, BALANCE=12000, USERNAME2=wx1, children=[ {ID=7470D8ACCB994A56A63431C28E6C21D4, USERNAME=wx3, BALANCE=13000, USERNAME2=wx2}]}]}]}, {ID=7470D8ACCB994A56A63431C28E6C21D4, USERNAME=wx3, BALANCE=13000, USERNAME2=wx2}, {ID=E3F657DEAD01492A9D5265B60EB88DA6, USERNAME=wx1, BALANCE=9000, USERNAME2=wx, children=[{ID=DA403914A5014D9699EA07789C5F978F, USERNAME=wx2, BALANCE=12000, USERNAME2=wx1, children=[{ID=7470D8ACCB994A56A63431C28E6C21D4, USERNAME=wx3, BALANCE=13000, USERNAME2=wx2}]}]}, {ID=DA403914A5014D9699EA07789C5F978F, USERNAME=wx2, BALANCE=12000, USERNAME2=wx1, children=[{ID=7470D8ACCB994A56A63431C28E6C21D4, USERNAME=wx3, BALANCE=13000, USERNAME2=wx2}]}
]

使用递归查询数据库中员工表中上下级关系相关推荐

  1. mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息

    前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...

  2. 获取SQLServer数据库中所有表

    对于获取SQLSERVER数据库中所有表,首先第一步引有SQLDMO.dll 找到文件路径: C:\Program   Files\Microsoft   SQL   Server\80\Tools\ ...

  3. 如何从Oracle数据库中的表中获取列名(字段名)列表?

    如何从Oracle数据库中的表中获取列名(字段名)列表? 目录 如何从Oracle数据库中的表中获取列名(字段名)列表? #示例一 #示例二 示例三: #示例一 可以获取: table_name:表名 ...

  4. (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)...

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  5. 如何使用TSQL获取数据库中所有表的列表?

    在SQL Server上的特定数据库中获取所有表名的最佳方法是什么? #1楼 select * from sys.tables; 要么 SELECT * FROM INFORMATION_SCHEMA ...

  6. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  7. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  8. 查询数据库中的表结构信息

    查询数据库中的表结构信息 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, I ...

  9. 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    2019独角兽企业重金招聘Python工程师标准>>> 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小 其实本来只想找一个方法能查询一下 数据库 的大小,没 ...

最新文章

  1. php程序员面试题(持续补充,偏中级面试题)
  2. 创文html5作品,【《创文故事》纪录短片入围作品展播之七】引路人
  3. 对AI"出错"零容忍?美国加强AI推理解释能力研究
  4. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(6) - 64位RFLAGS
  5. 卢伟冰暗示Redmi Note9即将到来:千元机的不二之选
  6. 用python画漂亮图-用Python画一些漂亮图形--Quora代码赏析
  7. ServletContextListener 和HttpSessionListener 的自我理解
  8. 阻滞增长模型求解_阻滞增长模型logistic模型.ppt
  9. 在华为能拿多少工资,揭秘一个真实的华为!
  10. mysql设置密码错误修改步骤
  11. java输入输出操作c盘文件拒绝访问问题
  12. QQ空间说说如何批量删除
  13. js 百度地图标记定位(一)
  14. 大数据江湖之即席查询与分析(上篇)--即席查询与分析的前世今生
  15. MyBatis基本工作原理
  16. 萌新如何用Python实现人脸替换升级看高级程序员一步一步带你进阶
  17. 【网站加速器】浏览器一键加速神器SpeedyFox
  18. 自定义bpmn.js左侧工具栏palette样式
  19. xp系统怎么启动任务计划服务器,xp怎么设置计划任务
  20. 如何使用jqdata获取上市公司自由现金流

热门文章

  1. 在高版本chrome播放摄像头实时RTSP视频流,并抓图、录像、回放、倍速等
  2. CAD开发——AcadSelectionSet 选择集
  3. WZOI-625全排列问题
  4. 拒绝996!21 点前必须离开工位!腾讯旗下这个工作室火了!
  5. Linkin大话eclipse快捷键
  6. 软件工程学习进度表9
  7. ETO——不忘初心,砥砺前行
  8. 首次使用DBISAM,感觉不错!
  9. 万字报告丨元宇宙的价值究竟在哪,有哪些方向值得重点关注?
  10. 诛天者 pat basic 练习五十三 住房空置率