java省市区树_Java后台以树形结构返回省市区三级区域信息
欢迎访问个人博客德鲁大叔撸代码
在前台页面很常见的一种需求是,以树形结构展示具有层级关系的数据。比如企业的部门信息、大部分管理系统的菜单、省市区信息等等。
具体如下图所示
一、表创建以及数据导入
执行下面创建表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后台以树形结构返回省市区三级区域信息相关推荐
- java arraylist 遍历树_Java递归遍历树形结构
废话不多说了,直接给大家贴代码,具体代码如下所示://菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { ...
- java swing 树_Java Swing JTree 树形
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.概念 官方JavaDocsApi:javax.swing.JTree JTree 树.将分层数据显示为树状轮廓的组件. 树由若干节点,通过层级关系组成 ...
- java list 树_java list转换为树形
感谢有奉献精神的人 转自:http://www.oschina.net/question/129154_235324 构造treelist的过程可以使用递归查询获取,表结构如下 create tabl ...
- java 树结构_Java通用tree树形结构
前言 现在大部分都是后端封装树形结构,第一次做的时候想从网上找通用,发现大部分都是要用类的get/set方法,不一样就要改,毕竟懒,改就改改,后来发现部门要,地区要,分类要,于是想着就把之前的用注解和 ...
- 后台数据转树形结构返回前台
前台向后台请求数据时可能会希望能得到一个树结构的数据结构,方便我们前台获取和使用,也能使得数据结构清晰.这时候需要,后台将数据转化为树形结构.整体思路为: 1. 定义树形结构的实体类 2. 新建工具类 ...
- java tire树_Java实现Tire
Trie,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比 ...
- java遍历树_Java实现遍历N级树形目录结构
最近挺忙,一直在做项目,然后有个树形目录结构需要返回给前端,这里给大家说一下实现的思路. 具体达到的效果类似: 一级目录A: 二级目录A: 三级目录: 四级目录: 文件.txt 二级目录B: 文件1. ...
- java表格树_Java程序员值得拥有的TreeMap指南
吃饭间隙,迷上了<吐槽大会>,一集一集地刷啊,觉得这些嘉宾真的挺有勇气的,敢于直面自己的惨淡槽点.于是,同学们看到了,我作为一个技术博主,也受到了"传染",不,受到了& ...
- java设计模式用组合模式实现树形结构
现有如下需求,某公司的机构: +公司 +分公司 +本地分公司 -呼和浩特 +包头 -昆区办事处 -青山办事处 +外地分公司 +总部 -人事处 +办公室 +财务处 实现思路: 抽象组合类,叶子类,根类 ...
- java继承构造_Java语言的继承结构
Java语言的继承结构 导语:Java语言找那个多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系,就是继承体系.下面是Java语言的继承结构,欢迎参考! (1)把很多类的相同特征和行为进行 ...
最新文章
- MVC 学习日志1(上)
- 如何用matlab分析chipscope的数据
- JDK安装和坏境变量配置
- 解析性语言与编译性语言优劣对比
- C++【“using namespace std”的意思、#include “iostream“与#include < iostream>区别、< iostream>与< iostream.h>区别】
- 设计模式是什么鬼(备忘录)
- MATLAB矩阵对称旋转
- java文件定时读写_java定时任务及日志的使用
- java 线程 函数_java – 从后台线程调用主线程上的函数
- 系统集成项目管理工程师考试大纲第二版
- 《IT项目管理那些事儿》——新浪微博抽奖活动
- 正则表达式:re.match、re.search、re.sub、re.compile、findall、re.finditer、re.split
- 点击更多显示更多内容
- 每天进步一点点——Linux系统中的异常堆栈跟踪简单实现
- android多击事件_android自定义OnTouchEvent处理长按,单击,双击,多击事件和Touch
- 【青岛站】SWAT模型高阶应用暨无资料地区建模、不确定分析与气候变化、土地利用对面源污染影响模型改进及案例分析研讨
- matlab与无网格,无网格法
- Tecplot绘制流体后处理图的问题
- input的oninput、onchange与onpropertychange事件
- 06540计算机网络2018年自考真题,自考06540计算机网络基本原理复习资料二
热门文章
- 正交试验设计例题及答案_正交试验设计中的方差分析-例题分析
- 虚拟机vm安装 黑群晖 DS3617xs 6.2
- 解决谷歌浏览器添加插件时显示程序包无效:“CRX_HEADER_INVALID“
- Envi辐射定标及大气校正
- 用摄动法证明fibs的一个公式(变形)
- CPU使用率和平均负载的关系
- windows环境下,CMD控制台查看进程、结束进程相关命令
- Mysql 根据经纬度计算距离
- SaaSpace:2022年4款最好的免费3D打印软件
- DirectX9初步