实体类:

public class AddressTreeDto {
private Long id;
private String text;//位置名称
private Long pId;//上一级
private Integer able; private List<AddressTreeDto> nodes; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getText() {
return text;
} public void setText(String text) {
this.text = text;
} public Long getpId() {
return pId;
} public void setpId(Long pId) {
this.pId = pId;
} public Integer getAble() {
return able;
} public void setAble(Integer able) {
this.able = able;
} public List<AddressTreeDto> getNodes() {
return nodes;
} public void setNodes(List<AddressTreeDto> nodes) {
this.nodes = nodes;
}
}

Service接口:

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

ServiceImpl实现类

public class AddressServiceImpl implements AddressService {
@Autowired
private AddressMapper addressMapper;
private List<AddressTreeDto> getChild(Long id, List<AddressTreeDto> rootAddress) {
// 子菜单
List<AddressTreeDto> childList = new ArrayList<>();
for (AddressTreeDto treeDto : rootAddress) {
// 遍历所有节点,将父菜单id与传过来的id比较
if (treeDto.getpId()!=null) {
if (treeDto.getpId().equals(id)) {
childList.add(treeDto);
}
}
}
// 把子菜单的子菜单再循环一遍
for (AddressTreeDto treeDto: childList) {
// 没有url子菜单还有子菜单---判断还有子菜单
if(getIds(treeDto.getId())!=null){
//递归
treeDto.setNodes(getChild(treeDto.getId(),rootAddress));
}
} // 递归退出条件
if (childList.size() == 0) {
return null;
}
return childList;
}
@Override
public List<AddressTreeDto> getAddressTree() {
// 原始的数据
List<AddressTreeDto> rootAddress = addressMapper.selectTree(Constants.ABLE_CONFIG.DEFAULT_ABLE);
// 查看结果
for (AddressTreeDto treeDto1 : rootAddress) {
System.out.println(treeDto1);
}
// 最后的结果
List<AddressTreeDto> addressList = new ArrayList<>();
// 先找到所有的一级菜单
for (int i = 0; i < rootAddress.size(); i++) {
// 一级菜单没有parentId
if (rootAddress.get(i).getpId()==0) {
addressList.add(rootAddress.get(i));
}
}
// 为一级菜单设置子菜单,getChild是递归调用的
for (AddressTreeDto treeDto1 : addressList) {
treeDto1.setNodes(getChild(treeDto1.getId(), rootAddress));
}
return addressList; } }

查询部门----返回给前台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. poi对excel的基本读写操作

    最近简单的弄了下poi对excel的应用,为方便自己以后的使用就把一些基本操作记录下来,其他更复杂的操作可以等以后有需求的时候再来深入了解一番! 写操作: /** * * 层次结构就是workbook ...

  2. B - Modular Inverse

    The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x ...

  3. centos7下安装docker(3.3创建镜像--修改dockerfile)

    1.我们在制作dockerfile的时候可能有些命令无法执行,导致镜像无法创建成功,这时我们可以修改dockerfile,从而达到我们的目的 查看Dockerfile内容 创建新的镜像,失败 Dock ...

  4. openssl windows 生成公钥与私钥

    链接: https://pan.baidu.com/s/1qn-qeFxovor-vcAWFl8jIw 提取码: zy5v 一,下载安装windows平台openssl密钥生成工具,执行安装目录bin ...

  5. Oracle数据库查询优化(上百万级记录如何提高查询速度)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引 ...

  6. Linux系统学习之文件管理

    Linux目录分布通常是树形,所以它的结构又称为目录树. 一.文件和目录管理 [root@Cfhost-170820-UCNK /]# cd / [root@Cfhost-170820-UCNK /] ...

  7. ubuntu16.04下zabbix安装和配置

    介绍 Zabbix是用于网络和应用的开源监控软件. 它提供从服务器,虚拟机和任何其他类型的网络设备收集的数千个度量的实时监控. 这些指标可以帮助您确定IT基础架构的当前运行状况,并在客户投诉之前检测硬 ...

  8. node.js 基础一 安装

    1.下载 2.安装 3.查看版本 一 下载 下载地址:https://nodejs.org/zh-cn/download/ 二 安装 运行安装包:node-v8.9.2-x64.msi

  9. https原理简析

    [转]http://www.cnblogs.com/carsonzhu/p/5225778.html HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手 ...

  10. Identity(四)

    本文摘自:ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇 探索身份验证与授权 在这一小节中,我将阐述和证明ASP.NET 身份验证和授权的工作 ...