最近项目中有需要获取全国行政区划省-市-区县-乡镇、街道办的树状结构数据,现将自己获取树的方法总结如下,有不到之处,敬请批评指正!

一、全国行政区划数据的整理以及获取

  1. 获取地址:https://pan.baidu.com/s/19JxdWH1R4z_HrrodFJUfjw?pwd=7bey    提取码:7bey
  2. 创建表

二、java代码示例

  • AreaTreeMapper.xml的编写 

    <select id="selectSymptomTreeNodeJson" resultType="com.boot.mybatis.entity.CategoryTreeNode">
      SELECT dq_id as id,dq_name AS title,parent_id as parentId FROM ft_sys_dq
    </select>

  • CategoryTreeNode实体类的编写

    • /**
      * @Project:
      * @Description:
      * @Auther: songwp
      * @Date: 2022/2/14 19:41
      **/
      @Data
      public class CategoryTreeNode {
      private BigInteger id;
      private String title;
      private BigInteger parentId;
      private List<CategoryTreeNode> children = new ArrayList<>();
      }

  • AreaTreeMapper接口编写

    /**
    * @Project:
    * @Description:
    * @Auther: songwp
    * @Date: 2022/2/14 19:44
    **/
    @Mapper
    public interface AreaTreeMapper {
      List<CategoryTreeNode> selectSymptomTreeNodeJson();
    }

  • AreaTreeService业务接口编写

    /**
    * @Project:
    * @Description:
    * @Auther: songwp
    * @Date: 2022/2/14 19:52
    **/
    public interface AreaTreeService {

      List<CategoryTreeNode> getSymptomTreeJson();
    }

  • AreaTreeServiceImpl的业务实现类编写

    • /**
      * @Project:
      * @Description:
      * @Auther: songwp
      * @Date: 2022/2/14 19:53
      **/
      @Service
      public class AreaTreeServiceImpl implements AreaTreeService {

      @Resource
      AreaTreeMapper areaTreeMapper;

      @Override
      public List<CategoryTreeNode> getSymptomTreeJson() {
      //从数据库获取数据的list(一次性获取的所有数据)
      List<CategoryTreeNode> list= areaTreeMapper.selectSymptomTreeNodeJson();
      List<CategoryTreeNode> resultList = new ArrayList<>();
      TreeUtil treeUtilNew = new TreeUtil();
      resultList = treeUtilNew.build(list); //进行封装
      return resultList; //返回树形结构json
      }
      }

  • AreaTreeController的编写  
    • /**
      * @Project:
      * @Description:
      * @Auther: songwp
      * @Date: 2022/2/14 19:57
      **/
      @RestController
      public class AreaTreeController {

      @Autowired
      AreaTreeService areaTreeService;

      @GetMapping("/getTreeList")
      public List<CategoryTreeNode> getTreeList(){
      return areaTreeService.getSymptomTreeJson();
      }

      }

  • TreeUtil的编写

    /**
    * @Project:
    * @Description: 构架树结构树形json--好用
    * @Auther: songwp
    * @Date: 2022/2/14 19:39
    **/
    public class TreeUtil {

    /**
    * 根据pid,构建树节点
    */
    public static <T extends CategoryTreeNode> List<T> build(List<T> treeNodes, Integer pid) {

      List<T> treeList = new ArrayList<>();
      for(T treeNode : treeNodes) {
        if (pid.equals(treeNode.getParentId())) {
          treeList.add(findChildren(treeNodes, treeNode));
        }
      }
    return treeList;
    }

    /**
    * 查找子节点
    */
    private static <T extends CategoryTreeNode> T findChildren(List<T> treeNodes, T rootNode) {
      for(T treeNode : treeNodes) {
        if(rootNode.getId().equals(treeNode.getParentId())) {
          rootNode.getChildren().add(findChildren(treeNodes, treeNode));
        }
      }
      return rootNode;
    }

    /**
    * 构建树节点
    */
    public static <T extends CategoryTreeNode> List<T> build(List<T> treeNodes) {
      List<T> result = new ArrayList<>();
      //list转map
      Map<BigInteger, T> nodeMap = new LinkedHashMap<>(treeNodes.size());
      for(T treeNode : treeNodes){
        nodeMap.put(treeNode.getId(), treeNode);
      }
      for(T node : nodeMap.values()) {
        T parent = nodeMap.get(node.getParentId());
          if(parent != null && !(node.getId().equals(parent.getId()))){
            parent.getChildren().add(node);
            continue;
            }

          result.add(node);
          }
        return result;
        }
    }

三、调用接口获取数据如下:

SpringBoot树获取方法总结的更多相关文章

  1. php 两种获取分类树的方法

    php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...

  2. SpringBoot中获取spring.profiles.active的值

    一.网上很多采用@Profile("dev")的方式获取,但是这个是类级别的 二.开发中可能需要代码级别 1.刚开始我想通过classpath下的文件读取方式,麻烦死了,于是换了个 ...

  3. SpringBoot web获取请求数据【转】

    SpringBoot web获取请求数据 一个网站最基本的功能就是匹配请求,获取请求数据,处理请求(业务处理),请求响应,我们今天来看SpringBoot中怎么获取请求数据. 文章包含的内容如下: 获 ...

  4. monkeyrunner之坐标或控件ID获取方法-续

    在之前的文章中,介绍过控件坐标和ID的获取方法,这里,我们再介绍一个新的工具-uiautomatorviewer. Uiautomatorviewer是Android sdk自带的工具,位置在sdk/ ...

  5. AspectJ获取方法注解的信息

    在使用Aspectj获取方法注解信息的时候,可以使用下面的代码片段: /** * Get value of annotated method parameter */ private <T ex ...

  6. Android应用启动时间及启动日志获取方法

    1. Android应用中,可以使用如下方式进行应用启动时间的查看 2. 启动日志获取方法:

  7. 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...

  8. Java获取方法参数名、Spring SpEL解析

    @Test public void testParse() { //表达式解析 ExpressionParser expressionParser = new SpelExpressionParser ...

  9. <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数

    说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...

随机推荐

  1. Android系统编程入门系列之硬件交互——通信硬件USB

    在硬件交互的首篇对设备硬件的分类中,互联通信系列硬件主要用来与其他设备进行数据交互.从本文开始,将重点介绍该系列相关硬件. 互联通信系列硬件 根据硬件的可通信距离,由近及远分为USB.NFC.蓝牙.W ...

  2. spring security 关于 http.sessionManagement().maximumSessions(1);的探究

    1.前言 spring security 支持对session的管理 , http.sessionManagement().maximumSessions(1);的意思的开启session管理,ses ...

  3. SQL高级优化(六)之MySQL索引

    一.索引概述 1. 索引的优点 ​ 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ...

  4. IE8和IE9下textarea滚动选中的问题

    在IE8和IE9下如果textarea设置了样式overflow-y:auto;就不可以滚动选中了,应该样式写成overflow:auto;有了纵向滚动实际上就不会出现横向滚动的情况,也没有必要ove ...

  5. 求n以内最大的k个素数以及它们的和

    本题要求计算并输出不超过n的最大的k个素数以及它们的和. 输入格式: 输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值. 输出格式: 在一行中按下列格式输出: 素数1+素数2+-+素 ...

  6. 【Java】包装类

    文章目录 包装类 什么是包装类 基本数据类型-->包装类 包装类-->基本数据类型 自动装箱与自动拆箱 基本数据类型.包装类与String的转换 基础数据类型.包装类-->Strin ...

  7. 【Java】回形数

    回形数 键盘读入一个整数n(1-20),以n为矩阵大小,把1,2,3,4,5-按顺时针螺旋的形式填入. import java.util.Scanner; public class HuiXingSh ...

  8. gin中的SecureJSON 防止 json 劫持

    使用 SecureJSON 防止 json 劫持.如果给定的结构是数组值或map,则默认预置 "while(1)," 到响应体. package main import ( &qu ...

  9. 怎么重载网卡?ip修改 HHS服务器

    目录 一:目录结构知识详述 1.网卡配置文件 2,ip修改 3.重载网卡信息 4.关闭网络管理器(因为已经有了network)所有要关闭NetworkManager不然会发生冲突 5.判断SSH服务是 ...

  10. ERNIE代码解析

    原创作者 |疯狂的Max ERNIE代码解读 考虑到ERNIE使用BRET作为基础模型,为了让没有基础的NLPer也能够理解代码,笔者将先为大家简略的解读BERT模型的结构,完整代码可以参见[1]. ...