1、此处只有后端的部分,测试使用的是swagger

Result类:

package com.chaoxing.user.beans.DTO;import com.google.gson.Gson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;import java.io.Serializable;@ApiModel("响应对象")
public class Result<T> implements Serializable {private static final long serialVersionUID = -8614669828681890797L;public static final int SUCCESS = 1;public static final int FAIL = 0;@ApiModelProperty(value = "结果码",dataType = "Integer",required = true)private int status;@ApiModelProperty(value = "结果描述",dataType = "String",required = true)private String message;@ApiModelProperty("响应数据对象")private T data;public Result() {}public Result(int status, String message) {this.status = status;this.message = message;this.data = null;}public Result(T data) {this.status = 1;this.message = "SUCCESS";this.data = data;}public Result(int status, T data, String message) {this.status = status;this.data = data;this.message = message;}@Overridepublic String toString() {Gson gson = new Gson();return gson.toJson(this);}public static <T> Result<T> custom(int status, T t, String message) {return new Result(status, t, message);}public static <T> Result<T> custom(int status, String message) {return new Result(status, message);}public static <T> Result<T> success(T t, String message) {return new Result(1, t, message);}public static <T> Result<T> success(String message) {return new Result(1, message);}public static <T> Result<T> fail(T t, String message) {return new Result(0, t, message);}public static <T> Result<T> fail(String message) {return new Result(0, message);}public static Result<String> success() {return new Result(1, "OK");}public static Result<String> fail() {return new Result(0, "FAIL");}public int getStatus() {return this.status;}public String getMessage() {return this.message;}public T getData() {return this.data;}public void setStatus(int status) {this.status = status;}public void setMessage(String message) {this.message = message;}public void setData(T data) {this.data = data;}
}

AreaTreeDTO 类:

import lombok.Data;import java.util.List;@Data
public class AreaTreeDTO {//    当前地区private AreaInfoDTO areaInfoDTO ;//    当前地区的下一级地区private List<AreaTreeDTO> areaTreeDTOS  ;}

AreaInfo类:

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;@Table(name = "area_info")
public class AreaInfo {/*** id*/@Idprivate Long id;/*** 区域名称*/@Column(name = "area_name")private String areaName;/*** 区域编码*/@Column(name = "area_code")private String areaCode;/*** 父类id*/@Column(name = "parent_id")private Long parentId;/*** 创建时间*/@Column(name = "create_time")private Date createTime;/*** 备注*/private String remark;/*** 1:正常   0:删除*/private Integer status;/*** 获取id** @return id - id*/public Long getId() {return id;}/*** 设置id** @param id id*/public void setId(Long id) {this.id = id;}/*** 获取区域名称** @return area_name - 区域名称*/public String getAreaName() {return areaName;}/*** 设置区域名称** @param areaName 区域名称*/public void setAreaName(String areaName) {this.areaName = areaName;}/*** 获取区域编码** @return area_code - 区域编码*/public String getAreaCode() {return areaCode;}/*** 设置区域编码** @param areaCode 区域编码*/public void setAreaCode(String areaCode) {this.areaCode = areaCode;}/*** 获取父类id** @return parent_id - 父类id*/public Long getParentId() {return parentId;}/*** 设置父类id** @param parentId 父类id*/public void setParentId(Long parentId) {this.parentId = parentId;}/*** 获取创建时间** @return create_time - 创建时间*/public Date getCreateTime() {return createTime;}/*** 设置创建时间** @param createTime 创建时间*/public void setCreateTime(Date createTime) {this.createTime = createTime;}/*** 获取备注** @return remark - 备注*/public String getRemark() {return remark;}/*** 设置备注** @param remark 备注*/public void setRemark(String remark) {this.remark = remark;}/*** 获取1:删除 0:正常** @return status - 1:删除 0:正常*/public Integer getStatus() {return status;}/*** 设置1:删除 0:正常** @param status 1:删除 0:正常*/public void setStatus(Integer status) {this.status = status;}

controller类:

@Controller
@Api(tags = "地区模块")
public class AreaController {@Autowiredprivate IAreaService areaService ;@GetMapping("/selectAreaListById")@ApiOperation("级联查询地区")@ResponseBodypublic Result selectAreaListById(String id) {return areaService.selectAreaListById(id);}@GetMapping("/selectAreaDataById")@ApiOperation("级联查询地区树数据结构")@ResponseBody
//   参数 id  对应的 是 parentIdpublic Result selectAreaDataById( String id) {return areaService.selectAreaDataById(id);}}

注释:第二个接口,查出来的内容是树形的。

Service类:IAreaService

public interface IAreaService {Result selectAreaListById(String id);Result selectAreaDataById(String id);
}

ServiceImpl类:

@Service
public class AreaServiceImpl implements IAreaService {@Autowiredprivate IAreaDao areaDao ;@Overridepublic Result selectAreaListById(String id) {if (null == id || "".equals(id.trim())){id = "0" ;}List<AreaInfo> areaInfos =  areaDao.selectAreaListById(id) ;if (null != areaInfos && areaInfos.size()>0){List<AreaInfoDTO> areaInfoDTOList=  AreaInfoConvert.INSTANCE.doList2DtoList(areaInfos) ;return  Result.success(areaInfoDTOList,"查询成功") ;}return Result.fail("数据为空,查询失败");}@Overridepublic Result selectAreaDataById(String id) {if (null == id || "".equals(id.trim())){id = "0" ;}//判断id中是否有值,如果有值就不走,如果没有值,就会将id变成0AreaInfo areaInfo ;   //实体类AreaInfo,这个是DO,是一个数据库的对象实体//将查出来的信息,封装在实体类中。只是一个实体,不是很多实体类if ("0".equals(id)){areaInfo =   areaDao.selectAreaInfoById("1") ;}else {areaInfo =   areaDao.selectAreaInfoById(id) ;}//如果查出来的数据为空的时候,就会查询失败if (null==areaInfo){return Result.fail("数据为空,查询失败");}//创建一个DTD的对象AreaTreeDTO  areaTreeDTO = new AreaTreeDTO() ;//将地区信息里面的参数,改成地区信息DTO的形式areaTreeDTO.setAreaInfoDTO(AreaInfoConvert.INSTANCE.do2Dto(areaInfo));//查询一个列表,就是parent_id=id的就是我们要查询的,最后,返回的是一个list的列表List<AreaInfo> areaInfos =  areaDao.selectAreaListById(id) ;//然后查询的列表进行判断,如果有子节点,就将子节点放在父节点下面。if (null != areaInfos && areaInfos.size()>0){List<AreaTreeDTO> areaDataDTOS = getAraaList(areaInfos) ;areaTreeDTO.setAreaTreeDTOS(areaDataDTOS);return  Result.success(areaDataDTOS,"查询成功") ;}return Result.fail("数据为空,查询失败");}/*** 无限极递归*** @param list* @return*/private  List<AreaTreeDTO> getAraaList(List<AreaInfo> list) {List<AreaTreeDTO> areaDataDTOS = new ArrayList<>() ;
//1,第一层list.stream().forEach(areaInfo -> {Long parentId = areaInfo.getId();
//2,第二层List<AreaInfo> areaInfos = areaDao.selectAreaListById(parentId.toString());AreaTreeDTO areaTreeDTO = new AreaTreeDTO() ;areaTreeDTO.setAreaInfoDTO(AreaInfoConvert.INSTANCE.do2Dto(areaInfo));if (null!=areaInfos && areaInfos.size()>0){//            递归核心地方List<AreaTreeDTO> areaTreeDTOList =   getAraaList(areaInfos) ;areaTreeDTO.setAreaTreeDTOS(areaTreeDTOList);}areaDataDTOS.add(areaTreeDTO) ;});return areaDataDTOS ;}}

mapper类:

import java.util.List;public interface IAreaDao {List<AreaInfo> selectAreaListById(String id);AreaInfo selectAreaInfoById(String id);
}

mapperImpl类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.entity.Example;import java.util.List;@Repository
public class AreaDaoImpl implements IAreaDao {@Autowiredprivate AreaInfoMapper areaInfoMapper ;@Overridepublic List<AreaInfo> selectAreaListById(String parentId) {Example example = new Example(AreaInfo.class);example.createCriteria().andEqualTo("parentId",parentId).andEqualTo("status", Constant.STATUS_ENABLE);return areaInfoMapper.selectByExample(example);}@Overridepublic AreaInfo selectAreaInfoById(String id) {Example example = new Example(AreaInfo.class);example.createCriteria().andEqualTo("id",id)   //会根据id,进行查找.andEqualTo("status", Constant.STATUS_ENABLE);   //查找的时候,会进行判断,如果是1,就是没有被删除,如果是0就是已经删除了。return areaInfoMapper.selectOneByExample(example);}
}

注释:有些包可能没有导入,因此可以改成自己的。

上面使用的方法,来自

tk_mybatis的mybatis_generator插件实现的类自带的接口。

使用Example类,需要传入一个值,这个值是实体类的编译后的类,通过反射的方式进行。

整个使用的方法是固定的,需要查询的就是,id,和status两个字段的属性。

java后端使用树结构表示省,市,县的实例相关推荐

  1. java 行政区划获取代码 省/市/县/乡镇/街道/村委会 层级 DivisionAdvUtil 爬虫获取完整的行政区划 代码完整 可运行

    /**  * 行政区划获取,层级有省,市,县,乡镇,街道,村委会<br>  * 数据源查看: ①.http://www.stats.gov.cn/sj/tjbz<br>  * ...

  2. Java后端返回多级分类的树形结构

    使用场景,不管是在前后端分离或者是不分离的项目中,我们通常会遇到这种多级分类的情况,比如前端需要选择 省--市--县 或者 计算机类--后端--Java工程师,这样的三级分类,也可能是二级分类或者更高 ...

  3. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  4. 解决“微信小程序http请求参数为空时,传到java后端变成了undefined”问题

    遇到问题: 最近在对接微信小程序和java后端springboot框架的接口,然后发现一个问题,当微信小程序发起http请求时,如果请求参数的值为空,传到java后端时就变成了undefined,这样 ...

  5. 省 市 县 三级联动

    大纲  一.导入省市县数据表(t_region)  二.引入jar包 三.导入所需util类(整体框架) 四.编写代码 1.配置数据库相关信息(数据库名.用户名.密码)    config.propr ...

  6. java后端调用百度地图

    注意:java后端调百度地图,走HTTP请求,HTTP请求一般较慢. 百度官方API地址 http://lbsyun.baidu.com/index.php?title=webapi/guide/we ...

  7. java后端面试大全,java后端面试宝典

    文章目录 -2 flink -1 linux of view linux查看占用cup最高的10个进程的命令: 〇.分布式锁 & 分布式事务 0-1分布式锁--包含CAP理论模型 概述 分布式 ...

  8. Java后端WebSocket的Tomcat实现

    转自: http://blog.chenzuhuang.com/archive/28.html http://www.cnblogs.com/xdp-gacl/p/5193279.html 一.Web ...

  9. Java后端进行经纬度点抽稀聚合,HTML呈现及前端聚合实现点聚合~

    Java后端进行经纬度点抽稀聚合,HTML呈现及前端聚合实现点聚合~ 1. 效果图~ 1.1 前端实现聚合及呈现 1.2 后端实现点聚合,前端渲染呈现效果图 2. 原理 3. 源码 3.1 前端JS实 ...

最新文章

  1. IntelliJ IDEA 的Project structure说明
  2. 科技公司升职的谎言与真相
  3. [知识图谱]利用py2neo从Neo4j数据库获取数据
  4. DIV+CSS布局的优势和弊端
  5. Windows Server 2008关闭默认windows共享
  6. Elasticsearch 搜索数组字段
  7. bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚【贪心+堆||差分】
  8. 解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题
  9. matlab矩阵中每一行数除以一个数
  10. Atitit java项目常用类库表 目录 1. Ati总的常用库 1 1.1. 表达式,语言解析类库 1 1.2. 字符串模板解析库velocity freemark 1 1.3. rest库
  11. 定时开关机软件推荐及相关特点介绍
  12. java web服务器热部署_Tomcat服务器热部署教程_如何实现tomcat热部署
  13. ubuntu SecureCRT 安装破解
  14. HTML5系列代码:Visual Studio Code(简称 VS Code)是一个由微软开发
  15. PAT 甲级 图形输出 1031 Hello World for U (20 分)
  16. 如何批量实现通过MP3标题重命名文件名
  17. 软件测试设计之——场景设计法,判定表法
  18. halcon算子翻译——cooc_feature_image
  19. 一阶电路实验报告心得_一阶rc电路的暂态响应实验报告分析
  20. Tomcat部署步骤

热门文章

  1. 实现-超级课程表——校园登录(1)
  2. jaxb 的使用介绍[转载]
  3. 2020吉尼斯世界纪录日:3051架无人机同时飞行
  4. dede diy.php查询数据,织梦二次开发数据库操作查询、插入、更新、删除实例
  5. php 教学心得 论文,信息技术教学心得体会
  6. 解决任务栏内没有声音图标
  7. unity3d LTS(2018-2020)国际版本下载与安装。
  8. python-报错和解决方法汇总
  9. 什么是死锁? 产生死锁的必要条件?怎样预防和避免死锁?
  10. Ubuntu14.04安装失败!!很伤心,Why?