省市区三级联动(后端)

news/2025/1/11 23:16:03/

前提:springboot、mybatis-plus、swagger

数据库

文章顶部

实体类:

City

package com.itfly.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;/*** <p>* 基础表-省市区* </p>** @author author* @since 2025-01-02*/
@Data
@ApiModel(value="City对象", description="市")
public class City implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "ID")@TableId(value = "city_id", type = IdType.AUTO)private Long cityId;@ApiModelProperty(value = "创建时间")private LocalDateTime createTime;@ApiModelProperty(value = "更新时间")private LocalDateTime updateTime;@ApiModelProperty(value = "名称")private String name;@ApiModelProperty(value = "区域编号")private String code;@ApiModelProperty(value = "层级 1,2,3")private Integer level;@ApiModelProperty(value = "父级ID")private Integer parentId;@ApiModelProperty(value = "拼音首字母缩写")private String acronym;@ApiModelProperty(value = "排序")private Integer sort;}

DTO:省份---ProvinceDto 

package com.itfly.dto.city;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.List;@Data
@ApiModel(value="ProvinceDto", description="省")
public class ProvinceDto {@ApiModelProperty(value = "ID")private Long cityId;@ApiModelProperty(value = "名称")private String name;@ApiModelProperty(value = "区域编号")private String code;@ApiModelProperty(value = "层级 1,2,3")private Integer level;@ApiModelProperty(value = "父级ID")private Integer parentId;@ApiModelProperty(value = "2级市列表")private List<CityDto> cityList;
}

市:CityDto

package com.itfly.dto.city;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.List;/*** <p>* 基础表-省市区* </p>** @author author* @since 2025-01-02*/
@Data
@ApiModel(value="CityDto", description="市")
public class CityDto {@ApiModelProperty(value = "ID")private Long cityId;@ApiModelProperty(value = "名称")private String name;@ApiModelProperty(value = "区域编号")private String code;@ApiModelProperty(value = "层级 1,2,3")private Integer level;@ApiModelProperty(value = "父级ID")private Integer parentId;@ApiModelProperty(value = "3级区县列表")private List<DistrictDto> districtList;}

区县:DistrictDto

package com.itfly.dto.city;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data@ApiModel(value="DistrictDto", description="区县")
public class DistrictDto {@ApiModelProperty(value = "ID")private Long cityId;@ApiModelProperty(value = "名称")private String name;@ApiModelProperty(value = "区域编号")private String code;@ApiModelProperty(value = "层级 1,2,3")private Integer level;@ApiModelProperty(value = "父级ID")private Integer parentId;}

 业务层逻辑:

控制器:

package com.itfly.controller;import com.itfly.conf.result.R;
import com.itfly.service.ICityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** <p>* 基础表-省市区 前端控制器* </p>** @author author* @since 2025-01-02*/
@RestController
@RequestMapping("/city")
@Api(tags = "省市区管理")
public class CityController {@Autowiredprivate ICityService cityService;//查询省市列表@GetMapping("/getAll")@ApiOperation(value = "查询省市列表(三级联动)")public R getProvince() {return cityService.getProvince();}
}

service:

package com.itfly.service;import com.itfly.conf.result.R;
import com.itfly.entity.City;
import com.baomidou.mybatisplus.extension.service.IService;/*** <p>* 基础表-省市区 服务类* </p>** @author author* @since 2025-01-02*/
public interface ICityService extends IService<City> {R getProvince();
}
ServiceImpl
package com.itfly.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.itfly.conf.result.R;
import com.itfly.dto.city.DistrictDto;
import com.itfly.dto.city.ProvinceDto;
import com.itfly.entity.City;
import com.itfly.dto.city.CityDto;
import com.itfly.mapper.CityMapper;
import com.itfly.service.ICityService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itfly.vo.CityVo;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;import java.util.List;/*** <p>* 基础表-省市区 服务实现类* </p>** @author author* @since 2025-01-02*/
@Service
public class CityServiceImpl extends ServiceImpl<CityMapper, City> implements ICityService {@Overridepublic R getProvince() {// 创建一个QueryWrapper用于查询省份(level为1)QueryWrapper<City> queryWrapperProvince = new QueryWrapper<>();queryWrapperProvince.eq("level", 1);// 查询所有省份List<City> listProvince = list(queryWrapperProvince);// 将查询到的省份列表转换为ProvinceDto列表List<ProvinceDto> provinceDtos = listProvince.stream().map(province -> {ProvinceDto provinceDto = new ProvinceDto();// 设置省份的基本信息provinceDto.setCityId(province.getCityId());provinceDto.setName(province.getName());provinceDto.setCode(province.getCode());provinceDto.setLevel(province.getLevel());provinceDto.setParentId(province.getParentId());// 创建一个QueryWrapper用于查询城市(level为2且parent_id为省份的cityId)QueryWrapper<City> queryWrapperCity = new QueryWrapper<>();queryWrapperCity.eq("level", 2).eq("parent_id", province.getCityId());// 查询所有城市List<City> listCity = list(queryWrapperCity);// 将查询到的城市列表转换为CityDto列表List<CityDto> cityDtos = listCity.stream().map(city -> {CityDto cityDto = new CityDto();// 设置城市的基本信息cityDto.setCode(city.getCode());cityDto.setName(city.getName());cityDto.setLevel(city.getLevel());cityDto.setParentId(city.getParentId());cityDto.setCityId(city.getCityId());// 创建一个QueryWrapper用于查询区县(level为3且parent_id为城市的cityId)QueryWrapper<City> queryWrapperArea = new QueryWrapper<>();queryWrapperArea.eq("level", 3).eq("parent_id", city.getCityId());// 查询所有区县List<City> listArea = list(queryWrapperArea);// 将查询到的区县列表转换为DistrictDto列表List<DistrictDto> areaDtos = listArea.stream().map(area -> {DistrictDto areaDto = new DistrictDto();// 设置区县的基本信息areaDto.setCode(area.getCode());areaDto.setName(area.getName());areaDto.setLevel(area.getLevel());areaDto.setParentId(area.getParentId());areaDto.setCityId(area.getCityId());return areaDto;}).toList();// 设置城市对应的区县列表cityDto.setDistrictList(areaDtos);return cityDto;}).toList();// 设置省份对应的城市列表provinceDto.setCityList(cityDtos);return provinceDto;}).toList();// 返回封装好的省份、城市和区县列表return R.Success(provinceDtos);}}

打开swagger查看:

00ba11ef9b174a13a7f5d55e9d5524ff.png

 


http://www.ppmy.cn/news/1562350.html

相关文章

如何在 Ubuntu 22.04 上安装 Nagios 服务器教程

简介 在本教程中&#xff0c;我们将解释如何在 Ubuntu 22.04 上安装和配置 Nagios&#xff0c;使用 Apache 作为 Web 服务器&#xff0c;并通过 Let’s Encrypt Certbot 使用 SSL 证书进行保护。 Nagios 是一个强大的监控系统&#xff0c;它可以帮助组织在 IT 基础设施问题影…

使用 Three.js 创建动态粒子效果

今天&#xff0c;带大家使用粒子实现一个粒子飞毯的效果&#xff0c;我们先来看一下效果。 实现 初始化场景 首先创建一个场景&#xff0c;所有 3D 对象都会被添加到这个场景中。 const scene new THREE.Scene();相机和渲染器 配置相机和渲染器来捕捉和显示场景。 相机…

【如何使用JVM工具进行性能分析?】

如何使用JVM工具进行性能分析&#xff1f; 使用JVM工具进行性能分析可以帮助开发者监控Java应用程序的运行状况&#xff0c;识别潜在的性能瓶颈&#xff0c;并据此进行优化。以下是几种常用的JVM性能分析工具及其详细使用方法&#xff1a; 1. jstat jstat是一个命令行工具&a…

事务,事务的特点,事务并发带来的问题,实现事务管理

1.什么是事务 1、事务管理是企业级应用程序开发中必不可少的技术&#xff0c;用来确保数据的完整性和一致性 2、事务是一系列动作&#xff0c;它们被当作一个独立的工作单元&#xff0c;这些动作要么全部完成&#xff0c;要么全不起作用。 2.事务的特点 ACID 1.原子性&#xf…

51单片机——中断(重点)

学习51单片机的重点及难点主要有中断、定时器、串口等内容&#xff0c;这部分内容一定要认真掌握&#xff0c;这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#…

Vue.js 中父组件与子组件通信指南

Vue.js 中父组件与子组件通信指南 引言 在构建复杂的用户界面时&#xff0c;Vue.js 的组件化开发模式允许我们将应用分解为多个小而独立的组件。这些组件之间往往需要进行数据交换或事件触发等交互行为。本文将探讨如何在Vue.js中实现父组件与子组件之间的通信。 使用Props从…

【Docker项目实战】使用Docker部署gallery轻量级图片管理系统

【Docker项目实战】使用Docker部署gallery轻量级图片管理系统 一、SFPG介绍1.1 应用简介1.2 主要特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载gallery…

Spring Cloud服务降级与隔离

Spring Cloud 是一个为微服务架构提供工具集和框架的集合。它在处理微服务之间的通信、配置管理、服务注册与发现等方面提供了许多有用的功能。在实际应用中&#xff0c;为了提高系统的稳定性和可靠性&#xff0c;服务降级&#xff08;fallback&#xff09;和服务隔离&#xff…