Java接口返回省市区树形结构的实现

作者:小花皮猪 时间:2021-10-16 05:07:05 

前言

最近和前端联调接口,需要进行一个省市区联动,最终定的方案是通过接口返回一个树形结构给前端,类似这样的结构:

Java接口返回省市区树形结构的实现

下面就把相关表和代码分享给大家

设计表结构

表结构已经准备好了,直接执行即可。

由于数据量较大,这里放不下,需要的伙伴们可以私聊我

CREATE TABLE `sys_region`  (
 `id` int(19) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `pid` int(19) NULL DEFAULT NULL COMMENT '上级ID,一级为0',
 `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
 `tree_level` int(3) NULL DEFAULT NULL COMMENT '层级',
 `leaf` int(3) NULL DEFAULT NULL COMMENT '是否叶子节点  0:否   1:是',
 `sort` int(19) NULL DEFAULT NULL COMMENT '排序',
 `create_by` varchar(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者',
 `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
 `update_by` varchar(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者',
 `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 820202 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '行政区域' ROW_FORMAT = Dynamic;

Java代码

下面分享Java相关的代码

entity

实体就是这个表的属性,这里最后一个属性childList就是用来存放子列表的,可以先建一个VO,我直接写在实体里面了。

package org.jeecg.modules.entity;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import java.util.List;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* @Description: 行政区域实体
* @Author:wyh
* @Date: 2021-04-06
*/
@Data
@TableName("sys_region")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "sys_region对象", description = "行政区域")
public class SysRegion implements Serializable {
   private static final long serialVersionUID = 1L;

/**
    * id
    */
   @TableId(type = IdType.ASSIGN_ID)
   @ApiModelProperty(value = "id")
   private Integer id;
   /**
    * 上级ID,一级为0
    */
   @Excel(name = "上级ID,一级为0", width = 15)
   @ApiModelProperty(value = "上级ID,一级为0")
   private Integer pid;
   /**
    * 名称
    */
   @Excel(name = "名称", width = 15)
   @ApiModelProperty(value = "名称")
   private String name;
   /**
    * 层级
    */
   @Excel(name = "层级", width = 15)
   @ApiModelProperty(value = "层级")
   private Integer treeLevel;
   /**
    * 是否叶子节点  0:否   1:是
    */
   @Excel(name = "是否叶子节点  0:否   1:是", width = 15)
   @ApiModelProperty(value = "是否叶子节点  0:否   1:是")
   private Integer leaf;
   /**
    * 排序
    */
   @Excel(name = "排序", width = 15)
   @ApiModelProperty(value = "排序")
   private Integer sort;
   /**
    * 创建者
    */
   @ApiModelProperty(value = "创建者")
   private String createBy;
   /**
    * 创建时间
    */
   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
   @DateTimeFormat(pattern = "yyyy-MM-dd")
   @ApiModelProperty(value = "创建时间")
   private Date createTime;
   /**
    * 更新者
    */
   @ApiModelProperty(value = "更新者")
   private String updateBy;
   /**
    * 更新时间
    */
   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
   @DateTimeFormat(pattern = "yyyy-MM-dd")
   @ApiModelProperty(value = "更新时间")
   private Date updateTime;
   /**
    * 子列表
    */
   @TableField(exist = false)  //表示这个属性不属于表中的字段
   private List<SysRegion> childList;

}

service

/**
    * @Author wyh
    * @Description  查询所有省级区域以树形式展示关系
    * @Date 10:00 2022/12/27
   **/
   List<SysRegion> queryAllProvinceTree();

serviceImpl

@Override
   public List<SysRegion> queryAllProvinceTree() {
       // 获取全部区域
       List<SysRegion> list = this.query().list();
       // 省区域
       List<SysRegion> provinceListOneLevelRegion = list.stream().filter(item -> item.getPid().intValue()==0).collect(Collectors.toList());
       //遍历一级地区
       provinceListOneLevelRegion.stream().forEach(oneItem ->
               {
                   //获得二级
                   List<SysRegion> twoLevelRegion = list.stream().filter(twoItem -> twoItem.getPid().intValue() == oneItem.getId().intValue())
                           .collect(Collectors.toList());
                   //遍历二级
                   twoLevelRegion.stream().forEach(twoItem ->
                   {
                       //获得 *
                       List<SysRegion> threeLevelRegion = list.stream().filter(threeItem -> threeItem.getPid().intValue() == twoItem.getId().intValue())
                               .collect(Collectors.toList());
                       twoItem.setChildList(threeLevelRegion);
                   });
                   oneItem.setChildList(twoLevelRegion);
               }
       );
       // 最终的树形结构列表
       return provinceListOneLevelRegion;
   }

controller

/**
    * 查询所有省级区域以树形式展示关系
    *
    * @return
    */
   @ApiOperation(value = "行政区域-查询所有省级区域以树形式展示关系", notes = "行政区域-查询所有省级区域以树形式展示关系")
   @GetMapping(value = "/queryAllProvinceTree")
   public Result<?> queryAllProvinceTree() {
       return Result.OK(SysRegionService.queryAllProvinceTree());
   }

调用接口查看结果

以上代码写完之后,就可以调用接口了,返回格式如下:

Java接口返回省市区树形结构的实现

来源:https://blog.csdn.net/weixin_46713508/article/details/128463970

标签:Java,返回,树形结构
0
投稿

猜你喜欢

  • 详解OpenCV For Java环境搭建与功能演示

    2023-05-27 09:13:50
  • C++右值引用与move和forward函数的使用详解

    2023-07-05 19:27:33
  • java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)

    2022-10-22 10:36:31
  • mybatis-plus排除非表中字段的操作

    2022-04-22 03:48:41
  • MyBatis中的properties配置(推荐)

    2023-06-04 20:47:58
  • Flutter开发Widgets 之 PageView使用示例

    2023-06-24 13:23:34
  • 深入剖析Java工厂模式让你的代码更灵活

    2022-05-26 00:42:28
  • hadoop中实现java网络爬虫(示例讲解)

    2021-12-22 01:35:20
  • 通过实例解析Socket套接字通信原理

    2023-11-02 20:17:35
  • springboot集成opencv实现人脸识别功能的详细步骤

    2023-10-07 00:38:22
  • Spring boot整合mybatis实现过程图解

    2023-01-15 09:31:05
  • C#表达式中的动态查询详解【译】

    2021-07-29 05:19:42
  • Java使用ArrayList实现扑克牌的示例代码

    2021-10-29 15:17:17
  • spring boot如何实现切割分片上传

    2023-06-29 02:49:26
  • Spring Cloud中Sentinel的两种限流模式介绍

    2021-11-22 00:38:10
  • 基于Ant路径匹配规则AntPathMatcher的注意事项

    2021-11-19 03:58:16
  • SpringMVC解析JSON请求数据问题解析

    2023-06-02 21:41:32
  • C# 获取系统进程的用户名

    2022-12-06 02:38:03
  • SpringBoot停止启动时测试检查rabbitmq操作

    2023-04-06 10:05:05
  • java基础的详细了解第四天

    2022-11-25 07:24:51
  • asp之家 软件编程 m.aspxhome.com