欢迎访问个人博客德鲁大叔撸代码

在前台页面很常见的一种需求是,以树形结构展示具有层级关系的数据。比如企业的部门信息、大部分管理系统的菜单、省市区信息等等。

具体如下图所示

一、表创建以及数据导入

执行下面创建表sql,创建sys_region存具体信息,表信息下载地址sys_region 行政区域表

CREATE TABLE `sys_region` (

`id` int(11) NOT NULL COMMENT '区域主键',

`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '区域名称',

`pid` int(11) NULL DEFAULT NULL COMMENT '区域上级标识',

`sname` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地名简称',

`level` int(11) NULL DEFAULT NULL COMMENT '区域等级',

`citycode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '区域编码',

`postcode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮政编码',

`mername` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组合名称',

`lng` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '经度',

`lat` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '纬度',

`pinyin` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '拼音',

`gmt_create` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',

`gmt_modified` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',

`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态 0正常 1停用',

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

二、编写Region实体类(mybatis generator自动生成后增加子区域属性)

@Data

public class Region {

private Integer id;

private String name;

private Integer pid;

private String sname;

private Integer level;

private String citycode;

private String postcode;

private String mername;

private String lng;

private String lat;

private String pinyin;

private Date gmtCreate;

private Date gmtModified;

private String status;

/**

* 子区域

*/

private Listchildren = new ArrayList<>();

}

三、查询接口和mybatis映射文件(省略,只展示查询sql)

select

from sys_region

AND name like concat('%', #{name}, '%')

AND citycode = #{citycode}

order by id

四、组装树形菜单(根据步骤三查到的列表)

1、控制转发层

@RestController

@RequestMapping("/region")

public class RegionController {

@Autowired

private RegionService regionService;

@GetMapping("/list")

public AjaxResult list(Region region){

ListregionList = regionService.selectRegionList(region); // 根据步骤三查到的集合(region表的全部数据)

Listtree = regionService.buildAreaTree(regionList); // 组装一个菜单树

return AjaxResult.success(tree); // 响应返回给前端页面的数据

}

}

2、组装树形菜单入口

@Override

public ListbuildAreaTree(Listregions) {

Listtree = new ArrayList<>();

for(Iteratorit = regions.iterator();it.hasNext();){

Region region = (Region) it.next();

if(region.getPid() == 0){

recursionFn(regions, region); //递归列表

tree.add(region);

}

}

return tree;

3、递归列表

/**

* 递归列表

* @param list

* @param region

*/

private void recursionFn(Listlist, Region region){

// 得到子节点列表

ListchildList = getChildList(list, region);

region.setChildren(childList);

for(Region child : childList){

if(hasChild(list,child)){

//判断是否有子节点

Iteratorit = childList.iterator();

while (it.hasNext()){

Region n = (Region) it.next();

recursionFn(list, n);

}

}

}

}

4、得到子节点列表(得到下级区域)

/**

* 得到子节点列表

* @param list

* @param region

* @return

*/

private ListgetChildList(Listlist, Region region){

Listtlist = new ArrayList();

Iteratorit = list.iterator();

while (it.hasNext()){

Region region1 = (Region) it.next();

if(region1.getPid().longValue() == region.getId().longValue()){

tlist.add(region1);

}

}

return tlist;

}

5、判断是否有下级区域

/**

* 判断是否有子节点

* @param list

* @param region

* @return

*/

private boolean hasChild(Listlist, Region region)

{

return getChildList(list, region).size() > 0 ? true : false;

}

五、postman测试

以省/直辖市为根节点,组装结果35

以陕西省为例,展示具体的市级信息

java省市区树_Java后台以树形结构返回省市区三级区域信息相关推荐

  1. java arraylist 遍历树_Java递归遍历树形结构

    废话不多说了,直接给大家贴代码,具体代码如下所示://菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { ...

  2. java swing 树_Java Swing JTree 树形

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.概念 官方JavaDocsApi:javax.swing.JTree JTree 树.将分层数据显示为树状轮廓的组件. 树由若干节点,通过层级关系组成 ...

  3. java list 树_java list转换为树形

    感谢有奉献精神的人 转自:http://www.oschina.net/question/129154_235324 构造treelist的过程可以使用递归查询获取,表结构如下 create tabl ...

  4. java 树结构_Java通用tree树形结构

    前言 现在大部分都是后端封装树形结构,第一次做的时候想从网上找通用,发现大部分都是要用类的get/set方法,不一样就要改,毕竟懒,改就改改,后来发现部门要,地区要,分类要,于是想着就把之前的用注解和 ...

  5. 后台数据转树形结构返回前台

    前台向后台请求数据时可能会希望能得到一个树结构的数据结构,方便我们前台获取和使用,也能使得数据结构清晰.这时候需要,后台将数据转化为树形结构.整体思路为: 1. 定义树形结构的实体类 2. 新建工具类 ...

  6. java tire树_Java实现Tire

    Trie,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比 ...

  7. java遍历树_Java实现遍历N级树形目录结构

    最近挺忙,一直在做项目,然后有个树形目录结构需要返回给前端,这里给大家说一下实现的思路. 具体达到的效果类似: 一级目录A: 二级目录A: 三级目录: 四级目录: 文件.txt 二级目录B: 文件1. ...

  8. java表格树_Java程序员值得拥有的TreeMap指南

    吃饭间隙,迷上了<吐槽大会>,一集一集地刷啊,觉得这些嘉宾真的挺有勇气的,敢于直面自己的惨淡槽点.于是,同学们看到了,我作为一个技术博主,也受到了"传染",不,受到了& ...

  9. java设计模式用组合模式实现树形结构

    现有如下需求,某公司的机构: +公司 +分公司 +本地分公司 -呼和浩特 +包头 -昆区办事处 -青山办事处 +外地分公司 +总部 -人事处 +办公室 +财务处 实现思路: 抽象组合类,叶子类,根类 ...

  10. java继承构造_Java语言的继承结构

    Java语言的继承结构 导语:Java语言找那个多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系,就是继承体系.下面是Java语言的继承结构,欢迎参考! (1)把很多类的相同特征和行为进行 ...

最新文章

  1. MVC 学习日志1(上)
  2. 如何用matlab分析chipscope的数据
  3. JDK安装和坏境变量配置
  4. 解析性语言与编译性语言优劣对比
  5. C++【“using namespace std”的意思、#include “iostream“与#include < iostream>区别、< iostream>与< iostream.h>区别】
  6. 设计模式是什么鬼(备忘录)
  7. MATLAB矩阵对称旋转
  8. java文件定时读写_java定时任务及日志的使用
  9. java 线程 函数_java – 从后台线程调用主线程上的函数
  10. 系统集成项目管理工程师考试大纲第二版
  11. 《IT项目管理那些事儿》——新浪微博抽奖活动
  12. 正则表达式:re.match、re.search、re.sub、re.compile、findall、re.finditer、re.split
  13. 点击更多显示更多内容
  14. 每天进步一点点——Linux系统中的异常堆栈跟踪简单实现
  15. android多击事件_android自定义OnTouchEvent处理长按,单击,双击,多击事件和Touch
  16. 【青岛站】SWAT模型高阶应用暨无资料地区建模、不确定分析与气候变化、土地利用对面源污染影响模型改进及案例分析研讨
  17. matlab与无网格,无网格法
  18. Tecplot绘制流体后处理图的问题
  19. input的oninput、onchange与onpropertychange事件
  20. 06540计算机网络2018年自考真题,自考06540计算机网络基本原理复习资料二

热门文章

  1. 正交试验设计例题及答案_正交试验设计中的方差分析-例题分析
  2. 虚拟机vm安装 黑群晖 DS3617xs 6.2
  3. 解决谷歌浏览器添加插件时显示程序包无效:“CRX_HEADER_INVALID“
  4. Envi辐射定标及大气校正
  5. 用摄动法证明fibs的一个公式(变形)
  6. CPU使用率和平均负载的关系
  7. windows环境下,CMD控制台查看进程、结束进程相关命令
  8. Mysql 根据经纬度计算距离
  9. SaaSpace:2022年4款最好的免费3D打印软件
  10. DirectX9初步