Java接口返回省市区树形结构的实现
短信预约 -IT技能 免费直播动态提醒
前言
最近和前端联调接口,需要进行一个省市区联动,最终定的方案是通过接口返回一个树形结构给前端,类似这样的结构:
下面就把相关表和代码分享给大家
设计表结构
表结构已经准备好了,直接执行即可。
由于数据量较大,这里放不下,需要的伙伴们可以私聊我
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;
@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;
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private Integer id;
@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;
@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
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
@ApiOperation(value = "行政区域-查询所有省级区域以树形式展示关系", notes = "行政区域-查询所有省级区域以树形式展示关系")
@GetMapping(value = "/queryAllProvinceTree")
public Result<?> queryAllProvinceTree() {
return Result.OK(SysRegionService.queryAllProvinceTree());
}
调用接口查看结果
以上代码写完之后,就可以调用接口了,返回格式如下:
到此这篇关于Java接口返回省市区树形结构的实现的文章就介绍到这了,更多相关Java 返回树形结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341