实体类:

  1. public class AddressTreeDto {
  2. private Long id;
  3. private String text;//位置名称
  4. private Long pId;//上一级
  5. private Integer able;
  6.  
  7. private List<AddressTreeDto> nodes;
  8.  
  9. public Long getId() {
  10. return id;
  11. }
  12.  
  13. public void setId(Long id) {
  14. this.id = id;
  15. }
  16.  
  17. public String getText() {
  18. return text;
  19. }
  20.  
  21. public void setText(String text) {
  22. this.text = text;
  23. }
  24.  
  25. public Long getpId() {
  26. return pId;
  27. }
  28.  
  29. public void setpId(Long pId) {
  30. this.pId = pId;
  31. }
  32.  
  33. public Integer getAble() {
  34. return able;
  35. }
  36.  
  37. public void setAble(Integer able) {
  38. this.able = able;
  39. }
  40.  
  41. public List<AddressTreeDto> getNodes() {
  42. return nodes;
  43. }
  44.  
  45. public void setNodes(List<AddressTreeDto> nodes) {
  46. this.nodes = nodes;
  47. }
  48. }

Service接口:

  1. public interface AddressService {
  2. //查询所有存放地,返回TreeView数据格式
  3.  
  4. List<AddressTreeDto> getAddressTree();
  5. }

ServiceImpl实现类

  1. public class AddressServiceImpl implements AddressService {
  2. @Autowired
  3. private AddressMapper addressMapper;
  4. private List<AddressTreeDto> getChild(Long id, List<AddressTreeDto> rootAddress) {
  5. // 子菜单
  6. List<AddressTreeDto> childList = new ArrayList<>();
  7. for (AddressTreeDto treeDto : rootAddress) {
  8. // 遍历所有节点,将父菜单id与传过来的id比较
  9. if (treeDto.getpId()!=null) {
  10. if (treeDto.getpId().equals(id)) {
  11. childList.add(treeDto);
  12. }
  13. }
  14. }
  15. // 把子菜单的子菜单再循环一遍
  16. for (AddressTreeDto treeDto: childList) {
  17. // 没有url子菜单还有子菜单---判断还有子菜单
  18. if(getIds(treeDto.getId())!=null){
  19. //递归
  20. treeDto.setNodes(getChild(treeDto.getId(),rootAddress));
  21. }
  22. } // 递归退出条件
  23. if (childList.size() == 0) {
  24. return null;
  25. }
  26. return childList;
  27. }
  28. @Override
  29. public List<AddressTreeDto> getAddressTree() {
  30. // 原始的数据
  31. List<AddressTreeDto> rootAddress = addressMapper.selectTree(Constants.ABLE_CONFIG.DEFAULT_ABLE);
  32. // 查看结果
  33. for (AddressTreeDto treeDto1 : rootAddress) {
  34. System.out.println(treeDto1);
  35. }
  36. // 最后的结果
  37. List<AddressTreeDto> addressList = new ArrayList<>();
  38. // 先找到所有的一级菜单
  39. for (int i = 0; i < rootAddress.size(); i++) {
  40. // 一级菜单没有parentId
  41. if (rootAddress.get(i).getpId()==0) {
  42. addressList.add(rootAddress.get(i));
  43. }
  44. }
  45. // 为一级菜单设置子菜单,getChild是递归调用的
  46. for (AddressTreeDto treeDto1 : addressList) {
  47. treeDto1.setNodes(getChild(treeDto1.getId(), rootAddress));
  48. }
  49. return addressList;
  50.  
  51. }
  52.  
  53. }

查询部门----返回给前台TreeView数据格式的数据的更多相关文章

  1. js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

    ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...

  2. <MyBatis>入门五 查询的返回值处理

    select : 返回对象:  <select  id = " "  resultType= "对象的全类名"  /> List: <sele ...

  3. Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据

    Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据 1. 1. 配置条件字段@Conditional 1 1 2. 2. 配置条件字段 ...

  4. 部门树形结构,使用Treeview控件显示部门

    部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...

  5. PDO 查询mysql返回字段整型变为String型解决方法

    PDO 查询mysql返回字段整型变为String型解决方法 使用PDO查询mysql数据库时,执行prepare,execute后,返回的字段数据全都变为字符型. 例如id在数据库中是Int的,查询 ...

  6. **CI两种方式查询所返回的结果数量

    区别:第一个是有条件的:第二个没有条件 $this->db->count_all_results(); 允许你获得某个特定的Active Record查询所返回的结果数量.可以使用Acti ...

  7. Atitit.列表页and查询条件的最佳实践(1)------设定搜索条件and提交查询and返回json数据

    Atitit.列表页and查询条件的最佳实践(1)------设置查询条件and提交查询and返回json数据 1. 1. 配置条件字段@Conditional 1 1 2. 2. 配置条件字段显示类 ...

  8. Linq to Sql:N层应用中的查询(上) : 返回自定义实体

    原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...

  9. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

    第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...

随机推荐

  1. C#用默认浏览器打开特定网址的几种方法

    方法一:从注册表中读取默认浏览器可执行文件路径 private void button1_Click(object sender, EventArgs e) { //从注册表中读取默认浏览器可执行文件 ...

  2. 阿里巴巴Web前端面试的一道JS题目,求解答!!!

    题目大概是这种: function outer(){ return inner; var inner = "a"; function inner(){}; inner = 9; } ...

  3. 使用KVM虚拟机遇到的问题(持续更新)

    1.qemu-kvm.kvm.qemu 和 qemu-system-x86_64四种命令的差别 qemu 和 qemu-system-x86_64:启动qemu虚拟机的命令,x86_64为64位系统时 ...

  4. HDU2966 In case of failure(浅谈k-d tree)

    嘟嘟嘟 题意:给定\(n\)个二维平面上的点\((x_i, y_i)\),求离每一个点最近的点得距离的平方.(\(n \leqslant 1e5\)) 这就是k-d tree入门题了. k-d tre ...

  5. HTML5 canvas getImageData() 方法

    下面的代码通过 getImageData() 复制画布上指定矩形的像素数据,然后通过 putImageData() 将图像数据放回画布: var c=document.getElementById(& ...

  6. 2017-2018-2 20155314《网络对抗技术》Exp5 MSF基础应用

    2017-2018-2 20155314<网络对抗技术>Exp5 MSF基础应用 目录 实验内容 实验环境 基础问题回答 预备知识 实验步骤--基于Armitage的MSF自动化漏洞攻击实 ...

  7. smartpass

    1.smartpass 是用户注册后,产生的用户名密码 与每个摄像头的用户名密码不一致 2.每个设备初始化登录密码为admin admin,如果需要修改,则在进入该设备IP地址,设置——>用户管 ...

  8. AI 主成分分析(PCA)

    主成分分析(principal components analysis,简称PCA),

  9. 【Codeforces 1137C】Museums Tour

    Codeforces 1137 C 题意:给一个有向图,一周有\(d\)天,每一个点在每一周的某些时刻会开放,现在可以在这个图上从\(1\)号点开始随意地走,问最多能走到多少个开放的点.一个点如果重复 ...

  10. ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解 (转载)

    “传导体” HttpContext 要理解 HttpContext 是干嘛的,首先,看图 图一 内网访问程序 图二 反向代理访问程序 ASP.NET Core 程序中,Kestrel 是一个基于 li ...