当前位置: 首页 > news >正文

JAVA后端实现全国区县下拉选择--树形结构

设计图如图:

直接上代码

数据库中的格式:

JAVA实体类:

@Data
public class SysAreaZoningDO {private Long districtId;private Long parentId;private String districtName;private List<SysAreaZoningDO> children;
}

MapperSQL语句:

<select id="getAllArea" resultType="cn.iocoder.saas.module.bank.dal.dataobject.syszoning.SysAreaZoningDO">WITH Provinces AS (SELECT *FROM sys_zoningWHERE parent_id = 0),Cities AS (SELECT *FROM sys_zoningWHERE parent_id IN (SELECT id FROM Provinces)),Districts AS (SELECT *FROM sys_zoningWHERE parent_id IN (SELECT id FROM Cities))SELECTp.id AS districtId,p.parent_id AS parentId,p.name AS districtName,NULL AS order_city,NULL AS order_area,'province' AS levelFROM Provinces pUNION ALLSELECTc.id AS districtId,c.parent_id AS parentId,c.name AS districtName,c.order_city AS order_city,NULL AS order_area,'city' AS levelFROM Cities cUNION ALLSELECTd.id AS districtId,d.parent_id AS parentId,d.name AS districtName,c.order_city AS order_city,d.order_area AS order_area,'district' AS levelFROM Districts dJOIN Cities c ON d.parent_id = c.idORDER BY order_city DESC,order_area ASC;</select>

Service层实现方法:

@Overridepublic List<SysAreaZoningDO> getAllArea() {// 获取扁平化的所有区域数据List<SysAreaZoningDO> allAreas = userAddressMapper.getAllArea();Map<Long, SysAreaZoningDO> areaMap = new HashMap<>();List<SysAreaZoningDO> provinces = new ArrayList<>();for (SysAreaZoningDO area : allAreas) {areaMap.put(area.getDistrictId(), area);if (area.getParentId() == 0) {provinces.add(area);}}for (SysAreaZoningDO area : allAreas) {if (area.getParentId() != 0) {SysAreaZoningDO parent = areaMap.get(area.getParentId());if (parent != null) {if (parent.getChildren() == null) {parent.setChildren(new ArrayList<>());}parent.getChildren().add(area);}}}return provinces;}

返回格式:

http://www.lryc.cn/news/504578.html

相关文章:

  • 数据结构速成
  • Electron-Vite 项目搭建(Vue)
  • 如何寻找和改进开源项目来作为个人简历项目
  • STEM真题 第五题 比 n 小的最大数
  • HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face 论文解读
  • 深入了解HTTPDNS-使用Python实现一个HTTPDNS服务
  • IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁
  • 网络安全教学博客(二):常见网络安全威胁剖析
  • 区块链技术及应用(期末考试版)
  • Ubuntu22.04 docker如何发布镜像(和用git差不多)
  • 基于python绘制数据表(上)
  • 【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章
  • Python PPT合并与拆分 – 详解
  • 舌头分割数据集labelme格式2557张1类别
  • LVS能否实现两台服务器的负载均衡
  • onlyoffice 容器配置修改后制作镜像导出以及上传到 dockerhub
  • Java常用 Date 时间格式化、Calender日历、正则表达式的用法
  • 案例讲解自然语言处理(NLP)
  • tryhackme——Pre Security(安检前)-Offensive Security(进攻性安全)
  • 2.python变量
  • 【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)
  • opencv获取摄像头的最大分辨率图像
  • 23.DDD与微服务
  • Redis是什么?Redis和MongoDB的区别在那里?
  • git SSL certificate problem: unable to get local issuer certificate
  • 使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式
  • 驱动开发系列30 - Linux Graphics DRM光标绘制分析
  • 如何利用Java爬虫获得淘宝买家秀
  • 【ArcGIS】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作
  • 虚幻引擎C++按键绑定