java实现省市区转换成树形结构

本文实例为大家分享了java实现省市区转换成树形结构的具体代码,供大家参考,具体内容如下

前言:为什我想写这篇博客呢?第一方面是记录,另一方面是分享。

1.创建数据库表

1.建表语句

CREATE TABLE `area`  (
  `AREA_CODE` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '区域ID',
  `AREA_NAME` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '区域名称',
  `SUPERIOR_CODE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父级代码',
  `AREA_LEVEL` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '级别',
  `AREA_SORT` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
  `REMARK` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `DELETE_FLAG` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标识',
  `CREATED_BY` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人',
  `CREATION_TIME` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `UPDATED_BY` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '更新人',
  `UPDATE_TIME` timestamp(0) NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间',
  PRIMARY KEY (`AREA_CODE`) USING BTREE,
  UNIQUE INDEX `UK_T_PUB_AREA_AREA_CODE`(`AREA_CODE`) USING BTREE,
  INDEX `IDX_T_PUB_AREA_AREA_LEVEL`(`AREA_LEVEL`) USING BTREE,
  INDEX `IDX_T_PUB_AREA_SUPERIOR_CODE`(`SUPERIOR_CODE`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '区域表' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

建表完成的table样式:

2.创建java实体

package org.labib.pojo;

import java.util.Date;

public class Area {
    //区域ID
    private String areaCode;
    //区域名称
    private String areaName;
    //父级代码
    private String superiorCode;
    //级别
    private String areaLevel;
    //排序
    private String areaSort;
    //备注
    private String remark;
    //删除标识
    private String deleteFlag;
    //创建人
    private String createdBy;
    //创建时间
    private Date creationTime;
    //更新人
    private String updatedBy;
    //更新时间
    private Date updateTime;

    public String getAreaCode() {
        return areaCode;
    }

    public void setAreaCode(String areaCode) {
        this.areaCode = areaCode == null ? null : areaCode.trim();
    }

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName == null ? null : areaName.trim();
    }

    public String getSuperiorCode() {
        return superiorCode;
    }

    public void setSuperiorCode(String superiorCode) {
        this.superiorCode = superiorCode == null ? null : superiorCode.trim();
    }

    public String getAreaLevel() {
        return areaLevel;
    }

    public void setAreaLevel(String areaLevel) {
        this.areaLevel = areaLevel == null ? null : areaLevel.trim();
    }

    public String getAreaSort() {
        return areaSort;
    }

    public void setAreaSort(String areaSort) {
        this.areaSort = areaSort == null ? null : areaSort.trim();
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark == null ? null : remark.trim();
    }

    public String getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(String deleteFlag) {
        this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim();
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy == null ? null : createdBy.trim();
    }

    public Date getCreationTime() {
        return creationTime;
    }

    public void setCreationTime(Date creationTime) {
        this.creationTime = creationTime;
    }

    public String getUpdatedBy() {
        return updatedBy;
    }

    public void setUpdatedBy(String updatedBy) {
        this.updatedBy = updatedBy == null ? null : updatedBy.trim();
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}

3.创建mapper

package org.labib.mapper;

import org.labib.pojo.Area;

import java.util.List;
import java.util.Map;
public interface AreaMapper {
    int deleteByPrimaryKey(String areaCode);

    int insert(Area record);

    int insertSelective(Area record);

    Area selectByPrimaryKey(String areaCode);

    int updateByPrimaryKeySelective(Area record);

    int updateByPrimaryKey(Area record);
    List<Area> queryAreaAll();
    List<Map<String, String>> queryMap();
}

4.创建service

@Service("AreaService")
public class AreaService {
    @Autowired
    private AreaMapper areaMapper;
    //修建
   public String queryArea(){
       List<Area> mapList = areaMapper.queryAreaAll();
       JSONArray result = ListToTree.buildTree(JSONArray.parseArray(JSON.toJSONString(mapList)),"areaCode","superiorCode","children");
       return result.toJSONString();
   }    //修建
   public String queryAreaCode(){
       List<Map<String, String>> mapList = areaMapper.queryMap();
       JSONArray result = ListToTree.buildTree(JSONArray.parseArray(JSON.toJSONString(mapList)),"value","superiorCode","children");
       return result.toJSONString();
   }
}

并附上转换成树形结构的工具类:

public class ListToTree {
    public static JSONArray buildTree(JSONArray arr, String id, String pid, String Chirden) {
        //新建一个JSONArray来接收组装成树形结构的返回值
        JSONArray jsonArray = new JSONArray();
        //新建一个JSONObject对象
        JSONObject hash = new JSONObject();
        //将数组转换为object格式
        for (int i = 0; i < arr.size(); i++) {
            //获取当前的JSON对象
            JSONObject json = (JSONObject) arr.get(i);
            //把当前id作为键,当前JSON对象作为值 put回hash这个Object对象中
            //这里的put方法类似于map的put方法
            hash.put(json.getString(id), json);
        }
        //遍历结果集
        for (int j = 0; j < arr.size(); j++) {
            //单条记录
            JSONObject aVal = (JSONObject) arr.get(j);
            //在hash中取出key为单条记录中pid的值
            String pidStr = "";
            //如果父级id不等于null
            if (aVal.get(pid) != null) {
                pidStr = aVal.get(pid).toString();
            }
            //从hash这个对象中获取父级对象  parent
            JSONObject hashParent = (JSONObject) hash.get(pidStr);
            //如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
            if (hashParent != null) {
                //检查是否有child属性
                if (hashParent.get(Chirden) != null) {
                    //有子节点 则先将子节点取出
                    JSONArray children = (JSONArray) hashParent.get(Chirden);
                    //然后把当前这个对象放进子节点之中
                    children.add(aVal);
                    //最后把子节点在放回父节点之中
                    hashParent.put(Chirden, children);
                } else {
                    //无子节点 则新建一个子节点
                    JSONArray children = new JSONArray();
                    //然后再把当前对象放进去
                    children.add(aVal);
                    //最后在放回父节点之中
                    hashParent.put(Chirden, children);
                }
            } else {
                jsonArray.add(aVal);
            }
        }
        return jsonArray;

    }
}

5.创建controller

@RestController
public class AreaController {
    @Resource
    private AreaService areaService;

    @RequestMapping(value = "/area",method = RequestMethod.POST)
    public String queryArea() {
        return areaService.queryArea();
    }
    @RequestMapping(value = "/area1",method = RequestMethod.POST)
    public String queryAreaDemo() {
        return areaService.queryAreaCode();
    }
}

6.接口测试

测试结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用递归删除树形结构的所有子节点(java和mysql实现)

    1.业务场景 有如下树形结构: +-0 +-1 +-2 +-4 +-5 +-3 如果删除某个父节点,则其子节点,以及其子节点的子节点,以此类推,需要全部删除. 2.Java实现 使用Map存储树形结构的数据,id为map的key,pid为树形结构的value. import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.uti

  • Java遍历输出指定目录、树形结构所有文件包括子目录下的文件

    下面通过一段代码介绍下Java输出指定目录.树形结构下的所有文件包括子目录中的文件的方法,并附有效果图. import java.io.File; public class ReadDirectory { // 文件所在的层数 private int fileLevel; /** * 生成输出格式 * @param name 输出的文件名或目录名 * @param level 输出的文件名或者目录名所在的层次 * @return 输出的字符串 */ public String createPri

  • java之TreeUtils生成一切对象树形结构案例

    项目中经常会遇到各种需要以树形结构展示的功能,比较常见的,如菜单树,分类树,部门树等等,如果为每种类型都遍历递归生成树形结构返回给前端,显得有些冗余且麻烦,并且其实逻辑都是一致的,只是遍历的对象不同而已,故其实可以通过面向接口思维,来实现这种通用工具类的实现. TreeNode用来表示每个树节点的抽象,即需要生成树的对象需要实现此接口. /** * 树节点父类,所有需要使用{@linkplain TreeUtils}工具类形成树形结构等操作的节点都需要实现该接口 * * @param <T>

  • Java创建树形结构算法实例代码

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBean import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import j

  • Java递归遍历树形结构

    废话不多说了,直接给大家贴代码,具体代码如下所示: //菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new JSONArray(); for (Object object : menuList) { JSONObject jsonMenu = JSONObject.fromObject(object); int menuId = jsonMenu.ge

  • Java数据封装树形结构代码实例

    这篇文章主要介绍了Java数据封装树形结构代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.实体类 @data public class PublishServiceType implements Comparable<PublishServiceType>{ /** * */ private static final long serialVersionUID = -3572108154932898825L; /* * @see

  • java实现省市区转换成树形结构

    本文实例为大家分享了java实现省市区转换成树形结构的具体代码,供大家参考,具体内容如下 前言:为什我想写这篇博客呢?第一方面是记录,另一方面是分享. 1.创建数据库表 1.建表语句 CREATE TABLE `area` ( `AREA_CODE` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '区域ID', `AREA_NAME` varchar(512) CHARACTER SET utf8

  • 使用Java将一个List运用递归转成树形结构案例

    在开发中,我们会遇到将不同组织架构合并成tree这种树状结构,那么如果做呢? 实际上,我们也可以理解为如何将拥有父子关系的list转成树形结构,而这其中主要的方法就是递归! 1.实体对象: @Data public class Node { private Integer id; private String city; private Integer pid; private List<Node> children; public Node(Integer id,String city,In

  • C++联合体转换成C#结构的实现方法

    本文实例主要参考MSDN:http://msdn.microsoft.com/zh-cn/library/ya9bz4ha%28v=vs.80%29.aspx 最近因为项目中遇到了C++联合体转换成C#结构的情况,查了很多资料才转换成功. 备注:对于官方这个UNION示例,我的简单理解,就是这类UNION做法,可适当代替IF ELSE 之类操作. 解决问题:如果只接收视频解码数据,而从不接收音频数据,那么是否可以直接定义结构体,并以此来获取视频数据. /// <summary> /// * @

  • Java 中二进制转换成十六进制的两种实现方法

    Java 中二进制转换成十六进制的两种实现方法 每个字节转成16进制,方法1 /** * 每个字节转成16进制,方法1 * * @param result */ private static String toHex(byte[] result) { StringBuffer sb = new StringBuffer(result.length * 2); for (int i = 0; i < result.length; i++) { sb.append(Character.forDigi

  • Java实现字符串转换成可执行代码的方法

    使用commons的jexl可实现将字符串变成可执行代码的功能,我写了一个类来封装这个功能: import java.util.Map; import org.apache.commons.jexl2.Expression; import org.apache.commons.jexl2.JexlContext; import org.apache.commons.jexl2.JexlEngine; import org.apache.commons.jexl2.MapContext; /**

  • Java Optional<Foo>转换成List<Bar>的实例方法

    1.转换方法代码 public List<Bar> get(Optional<Foo> foo) { return foo.map(x -> x.getBazList() .stream() .map(Baz::getBar) .collect(Collectors.toList())) .orElse(Collections.emptyList()); } 或 public List<Bar> get(Optional<Foo> foo) { ret

  • Java List Object[]转换成List T的实例

    一)背景 主要是为了实现数据之间的转换,方便数据展示. 使用场景:当数据可能是List<Object[]>类型,可能会需要转换成具体的List<Class>格式. 二)List<Object[]>转换成List<T> 功能:传入List<Object[]>数据和需要转换的Class对象,返回一个List<Class>数据集合 实现方式:Java反射方式,使用的是构造器的方式 缺点:实体类中必须有无参数构造器,有参数构造器,且构造器参数

  • java中将汉字转换成拼音的实现代码

    一:演示:       如在控制台输入:北京欢迎你 打印出来的拼音:bei jing huan ying ni 二:导入要依赖的jar: 汉字转换拼音jar下载 三:代码编写 复制代码 代码如下: public static String getPinYin(String src) {         char[] t1 = null;         t1 = src.toCharArray();          // System.out.println(t1.length);      

  • 使用递归算法结合数据库解析成Java树形结构的代码解析

    1.准备表结构及对应的表数据 a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父节点 ) b.表数据: insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0); insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1); insert into tb_tree

随机推荐