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());
}
调用接口查看结果
以上代码写完之后,就可以调用接口了,返回格式如下:
来源:https://blog.csdn.net/weixin_46713508/article/details/128463970


猜你喜欢
- Vitamio是一个功能强大而稳定的播放器库,它支持多种视频格式和编解码方式,并且具有快速、流畅的播放效果,因此在一些对播放质量要求比较高的
- 数据导出到Excel几乎是所有客户都会提出的一个需求。下面我就分享一下我的代码。首先需要引入的jar包:然后就是正式代码了。package
- 为什么要在控制台输出 SQL 呢?当然是为了开发调试的时候方便了。如果一个 数据库相关的操作出现了问题,我们可以根据输出的SQL语句快速排查
- 前言最近在学习java8,所以接下来会给大家介绍一系列的Java8学习内容,那么让我们先从lambda表达式开始。众所周知从java8出现以
- ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕.1. ListView的简单用
- 我公司最近升级程序经常报出更新失败问题,究其原因,原来是更新时,他们可能又打开了正在被更新的文件,导致更新文件时,文件被其它进程占用,无法正
- 前言Spring Boot 中提供一个全局的配置文件:application.properties,这个配置文件的作用就是,允许我们通过这个
- 实现Java多态性的时候,关于方法调用的优先级:我们这样假设下,super(超类)、this(当前类对象)、show(方法)、object(
- 1、用字符串分隔: using System.Text.RegularExpressions; string str="aaajs
- 我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还
- 要实现PPT转图片,首先需要引用两个DLL。我这里用的这个这个版本Microsoft.Office.Interop.PowerPoint 1
- 1)在我们的项目中添加引用文件:TaskSchedulerEngine.dll(dll定义了一个ITask接口,定义了两个方法Initial
- 我们知道,Spring可以通过包扫描将使用@Component注解定义的Bean定义到容器中。今天就来探究下他实现的原理。首先,找到@Com
- Map接口简介Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。从M
- 前段时间写了一篇C#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并。本文借下载歌词文件来探讨一下同步和异步方法。 L
- 如果一个对象不为空null时,把它赋给另外一个对象:像下面这个样子,需要把str的值赋给result,前提条件是在不为空null的前提之下:
- 题目:给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路
- Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindServ
- spring-retry是什么?spring-retry是spring提供的一个重试框架,原本自己实现的重试机制,现在spring帮封装好提
- 1.背景在项目中有些敏感信息不能直接展示,比如客户手机号、身份证、车牌号等信息,展示时均需要进行数据脱敏,防止泄露客户隐私。脱敏即是对数据的