数据库中存储省市级数据,id和pid的形式

数据库结构

DROP TABLE IF EXISTS `area`;
CREATE TABLE `bfm_area` (`AREA_ID` decimal(6,0) NOT NULL COMMENT '区域,网络服务区域,是一种逻辑的划分,通常和行政区域划分重叠',`PARENT_ID` decimal(6,0) DEFAULT NULL,`AREA_LEVEL` decimal(6,0) DEFAULT NULL,`AREA_NAME` varchar(60) NOT NULL,`COMMENTS` varchar(255) DEFAULT NULL,`AREA_CODE` varchar(60) DEFAULT NULL,`SP_ID` decimal(6,0) DEFAULT NULL,PRIMARY KEY (`AREA_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域,网络服务区域,是一种逻辑的划分,通常和行政区域划分重叠\r\n\r\nSEQ:\r\n  T_B';

前端接收数据

[{value: 'zhejiang',label: 'Zhejiang',children: [{value: 'hangzhou',label: 'Hangzhou',children: [{value: 'xihu',label: 'West Lake',},],},],},{value: 'jiangsu',label: 'Jiangsu',children: [{value: 'nanjing',label: 'Nanjing',children: [{value: 'zhonghuamen',label: 'Zhong Hua Men',},],},],},
]

数据库数据插入示范

INSERT INTO `bfm_area` VALUES ('1', null, '1', '中国', '国家', '1', '0');
INSERT INTO `bfm_area` VALUES ('11', '1', '2', '北京市', '省份', '11', '0');
INSERT INTO `bfm_area` VALUES ('12', '1', '2', '天津市', '省份', '12', '0');
INSERT INTO `bfm_area` VALUES ('13', '1', '2', '河北省', '省份', '13', '0');
INSERT INTO `bfm_area` VALUES ('14', '1', '2', '山西省', '省份', '14', '0');

实体对象

public class AreaEntity {String areaId;String parentId;String areaLevel;String areaName;String comments;String areaCode;
}

数据转换pojo,将数据库取出的数据进行转换为此对象列表

public class Area {
//行记录idString areaId;//省市级对象父idString parentId;//省市级级别String areaLevel;//省市级名称String areaName;//省市级对象idString areaCode;//下属数据List<Area> children;
}

执行数据转换的逻辑代码:
这是一种用数据结构解决省市县格式输出的方式,一次性取出所有数据也是为了减少与数据库的io操作。

    public  List<Area> getAreaNode(){//先从数据库中取出三级省市区对象List<AreaEntity> secondLevel = areaDictMapper.getAreaByLevel("2");List<AreaEntity> thirdLevel = areaDictMapper.getAreaByLevel("3");List<AreaEntity> forthLevel = areaDictMapper.getAreaByLevel("4");//总体思路,遍历顺序县-市-省,向上插入//以父id为key,子链表为value构造map集合//存放数据结构  三级节点,和每级节点对应的list集合Map<String,List<Area>> forthMap = new HashMap<>();for(AreaEntity areaEntity:forthLevel){String parentId = areaEntity.getParentId();Area area = new Area();//为了将从数据库中取出的数据转换为前端需要的数据格式BeanUtils.copyProperties(areaEntity,area);//如果不存在,就为此父节点new一个子链表if(!forthMap.containsKey(parentId)){List<Area> forthList = new ArrayList<>();forthMap.put(areaEntity.getParentId(),forthList);}List<Area> current = forthMap.get(parentId);current.add(area);}Map<String,List<Area>> thirdMap = new HashMap<>();for(AreaEntity areaEntity:thirdLevel){String parentId = areaEntity.getParentId();Area area = new Area();//1 三级结构,如果此父code有子链表,则子必在forthMap中,直接取出放在父节点的children中if(forthMap.containsKey(areaEntity.getAreaCode())){area.setChildren(forthMap.get(areaEntity.getAreaCode()));}BeanUtils.copyProperties(areaEntity,area);//2 如果此节点是第一次添加进map集合,先new一个if(!thirdMap.containsKey(parentId)){List<Area> thirdList = new ArrayList<>();thirdMap.put(parentId,thirdList);}List<Area> current = thirdMap.get(parentId);current.add(area);}List<Area> secondList = new ArrayList<>();for(AreaEntity areaEntity:secondLevel){String areaCode = areaEntity.getAreaCode();Area area = new Area();BeanUtils.copyProperties(areaEntity,area);if(thirdMap.containsKey(areaEntity.getAreaCode())){area.setChildren(thirdMap.get(areaCode));}secondList.add(area);}return secondList;}

下面介绍一种之前用的使用递归方式生成省市县数据格式的方式:缺点是io频繁

javaNode对象

public class DomResTypeNode {DomResType data;List<DomResTypeNode> childList;public DomResTypeNode(DomResType data) {this.data = data;this.childList = new ArrayList<DomResTypeNode>();}public DomResTypeNode(DomResType data, List<DomResTypeNode> childList) {this.data = data;this.childList = childList;}
}

javaBean对象

public class DomResType {Integer domId;Integer id;String description;Integer pId;String name;Integer status;
}
        //先new一个初始节点,用此节点的id等于要查询的父节点往下查询DomResType DomResTypeRoot = new DomResType();public DomResTypeNode createDomResTypeTree(DomResTypeNode domResTypeNode) {int domId = domResTypeNode.getData().getDomId();int resTypeId = domResTypeNode.getData().getId();//找到子节点的资源属主//看看谁的pid等于当前的id,谁就是当前节点的子节点List<DomResType> child = domResTypeMapper.getDomResTypesByPid(domId,resTypeId);//将子节点加入节点中for(DomResType domResType : child){DomResTypeNode domResTypeNode1 = new DomResTypeNode(domResType);domResTypeNode.getChildList().add(domResTypeNode1);}//递归遍历子节点,让每个子节点递归生成子树for(DomResTypeNode domResTypeNode1 : domResTypeNode.getChildList()){if(domResTypeNode1.getData() != null){createDomResTypeTree(domResTypeNode1);}}return domResTypeNode;}

全国省市数据结构从数据库到接口相关推荐

  1. 全国省市区县 MySQL 数据库 含行政区划编码 名称 父级行政区划编码 基于国家统计局2017年3月发布数据

    个人技术博客地址:http://songmingyao.com/ 前段时间,因为做个人Django项目需要用到省市区选择器,网上找了些省市区的MySQL数据库,可惜要么太旧要么要收费,于是根据国家统计 ...

  2. 全国 省市 自治区的数据库sql生成

    --创建省级表 Create Table Province ( ProID int primary key not null, ProName nvarchar(50) not null ) Go - ...

  3. oracle 省份三个字的,全国省市区县数据库-省份(全)

    全国省市区县数据库-省(全) /**********创建省级表**********/ CREATE TABLE T_Province ( ProID INT IDENTITY(1,1) PRIMARY ...

  4. 今日油价接口 全国省市今日油价数据实现

    今日油价接口实现全国省市今日汽油价格查询,最新柴油油价实时行情. 接口名称:今日油价接口 接口平台:免费接口 接口地址:http://apis.juhe.cn/cnoil/oil_city 支持格式: ...

  5. echarts地图罗平县的json_Echarts全国省市区县地图数据文件(含js及json)

    [实例简介] Echarts全国省市区县地图数据文件(含js及json两种数据格式) [实例截图] [核心代码] Echarts全国省市区县地图数据文件(含js及json) └── Echarts全国 ...

  6. 3、常用数据库访问接口简介

    不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行 SQL 语句,进行数据库管理.主要的数据库访问接口主要有 ODBC.JDBC.ADO.NET 和 PDO. ODBC ODB ...

  7. mysql 接口访问_MySQL的数据库访问接口-阿里云开发者社区

    大部分流行的关系数据库产品采用的都是 C/S 架构.因此,应用程序要访问数据库的数据就必须和各种数据库客户端(也称为数据库访问接口)打交道.可以这么认为,每一种流行的编程语言都需要一个对应的数据库访问 ...

  8. 【Qt】数据库SQL接口层

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. QSqlDatabase类 04. QSqlError类 05. QSqlQuery类 06. QSqlRecord类 0 ...

  9. 腾讯地图api_数据库API接口的类型及应用场景

    Database API interface 数据库API接口 的类型及应用场景 -keynote speaker- 主讲嘉宾:黄镝 时间:2020年12月16日  晚上7:00 「昆虫小课堂」202 ...

最新文章

  1. java静态代理与动态代理
  2. 视觉SLAM直接法与特征法及其在多传感融合中的思考
  3. 从零开始学电脑办公_从零开始学办公软件之办公软件介绍
  4. P1311 选择客栈
  5. html 轮播图_JS拖拽专题(二)——「实战」滑动轮播图的那点事儿
  6. windows虚拟机_Windows电脑体验macOS,装黑苹果?虚拟机也可以的——VMWare篇
  7. 博弈论分析题_最新博弈论复习题及答案分析
  8. Maven仓库管理器-Nexus
  9. python pyhook_python中使用pyhook实现键盘监控的例子
  10. 南澳大学计算机科学专业学费,澳洲南澳大学生活费
  11. ADS1256实现轮询
  12. 手机通讯终端软件硬件测试,浅谈基于SWP方案的近场通信终端测试及其方法探究...
  13. AD16显示所有元件文本注释
  14. org.w3c.dom。 XML解析 练习
  15. 计算机开机键鼠无法识别,外设门诊:鼠标开机不认 需重插拨怎么办
  16. c语言文件压缩怎么求压缩比,文件压缩C语言程序设计报告.doc
  17. 7.24[C语言零基础 知识点总结]
  18. java websocket实现即时聊天系统
  19. WEB——07JDBC
  20. 【Unity】UGUI系列教程——拼接一个简单界面

热门文章

  1. 吃透Chisel语言.30.Chisel进阶之通信状态机(二)——FSMD:以Popcount为例
  2. Linux基础(day49)
  3. python在日常生活中的应用,几乎和我们的生活息息相关(含资源)
  4. 202:vue+openlayers: easing的API及在view.animation中使用示例
  5. 咸鱼菌玩3D—123D Design安装
  6. java设计模式 英文版_Java设计模式(第2版)(精装英文版)
  7. 学习web前端有什么要求吗
  8. 证明SSreg=SYY-RSS最小二乘法的解释变量和非解释变量之间的关系
  9. 李开复:我在硅谷看到了什么?
  10. MySQL数据备份恢复全攻略,让我们通过简单几步找回丢失的数据