Java查询字典树结构及省市县树结构

1.字典数据

省市县结构在资源中

/*
 Date: 13/08/2024 14:27:16
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for kz_meta_nodes
-- ----------------------------
DROP TABLE IF EXISTS `kz_meta_nodes`;
CREATE TABLE `kz_meta_nodes`  (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典编码',
  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
  `pid` int NULL DEFAULT NULL COMMENT '父ID(顶级父ID为0)',
  `type_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务类型code',
  `type_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务名称',
  `sort` int NULL DEFAULT NULL COMMENT '排序',
  `status` int NULL DEFAULT NULL COMMENT '状态(0:启用,1:禁用)',
  `business_value` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拓展value编码',
  `remarks` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注说明',
  `created_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `updated_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
  `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `deleted_time` datetime NULL DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `pid`(`pid` ASC) USING BTREE,
  INDEX `value`(`value` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 407 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '业务字典表 ' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of kz_meta_nodes
-- ----------------------------
INSERT INTO `kz_meta_nodes` VALUES (352, '143', '球星卡', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (353, '144', '篮球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (354, '145', '足球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (355, '146', '橄榄球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (356, '147', '棒球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (357, '148', '冰球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (358, '149', '高尔夫', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (359, '150', '网球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (360, '185', '3C数码家电', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (361, '186', '3C数码配件', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (362, '187', '电脑', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (363, '188', '电脑配件', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (364, '189', '网络设备', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (365, '190', '影音电器', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (366, '191', '摄影/摄像', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (367, '192', '智能设备', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (368, '193', '家电', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (369, '194', '生活电器', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (370, '195', '服饰内衣', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (371, '196', '男装', 370, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (372, '197', '女装', 370, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (373, '198', '鞋靴箱包', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (374, '199', '男鞋', 373, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (375, '200', '女鞋', 373, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (376, '201', '箱包', 373, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (377, '202', '运动户外', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (378, '203', '运动用品', 377, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (379, '204', '运动服饰', 377, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (380, '205', '自行车', 377, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (381, '206', '钟表配饰', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (382, '207', '钟表', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (383, '208', '时尚饰品', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (384, '209', '打火机', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (385, '210', '瑞士军刀', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (386, '211', '眼镜', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (387, '212', '珠宝文玩', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (388, '213', '珠宝', 387, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (389, '214', '文玩', 387, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (390, '215', '收藏品', 387, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (391, '216', '美妆个护', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (392, '217', '美妆', 391, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (393, '218', '个护', 391, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (394, '219', '食品饮料', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (395, '220', '食品', 394, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (396, '221', '饮品', 394, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (397, '222', '保健品', 394, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (398, '223', '玩具潮玩', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (399, '224', '玩具', 398, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (400, '225', '潮玩', 398, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (401, '226', '动漫周边', 398, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (402, '227', '图书影像', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (403, '228', '图书', 402, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (404, '229', '影音', 402, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (405, '230', '智能家居', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (406, '231', '智能家居', 405, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);

SET FOREIGN_KEY_CHECKS = 1;

2.树结构工具类

package com.jiuheng.smartCard.common.utils;

import com.jiuheng.smartCard.vo.KzMetaNodesVO;

import java.util.ArrayList;
import java.util.List;

public class TreeBuildUtil {
    // 保存参与构建树形的所有数据(通常数据库查询结果)
    public List<KzMetaNodesVO> nodeList = new ArrayList<KzMetaNodesVO>();

    /**
     *  构造方法
     *  @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。
     */
    public TreeBuildUtil(List<KzMetaNodesVO> nodeList){
        this.nodeList = nodeList;
    }
    /**
     *   获取需构建的所有根节点(顶级节点) "0"
     *   所有根节点List集合
     */
    public List<KzMetaNodesVO> getRootNode(){
        // 保存所有根节点(所有根节点的数据)
        List<KzMetaNodesVO> rootNodeList = new ArrayList<>();
        // treeNode:查询出的每一条数据(节点)
        for (KzMetaNodesVO treeNode : nodeList){
            // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。
            if ("0".equals(treeNode.getPid())) {
                // 是,添加
                rootNodeList.add(treeNode);
            }
        }
        return rootNodeList;
    }

    /**
     *  根据每一个顶级节点(根节点)进行构建树形结构
     *  @return  构建整棵树
     */
    public List<KzMetaNodesVO> buildTree(){
        // treeNodes:保存一个顶级节点所构建出来的完整树形
        List<KzMetaNodesVO> treeNodes = new ArrayList<KzMetaNodesVO>();
        // getRootNode():获取所有的根节点
        for (KzMetaNodesVO kzMetaNodesVO : getRootNode()) {
            // 将顶级节点进行构建子树
            kzMetaNodesVO = buildChildTree(kzMetaNodesVO);
            // 完成一个顶级节点所构建的树形,增加进来
            treeNodes.add(kzMetaNodesVO);
        }
        return treeNodes;
    }

    /**
     *  递归-----构建子树形结构
     *  根节点(顶级节点)
     *  @return 整棵树
     */
    public KzMetaNodesVO buildChildTree(KzMetaNodesVO kzMetaNodesVO){
        List<KzMetaNodesVO> childTree = new ArrayList<KzMetaNodesVO>();
        // nodeList:所有节点集合(所有数据)
        for (KzMetaNodesVO treeNode : nodeList) {
            // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点
            if (treeNode.getPid().equals(kzMetaNodesVO.getCodeId())) {
                // 再递归进行判断当前节点的情况,调用自身方法
                childTree.add(buildChildTree(treeNode));
            }
        }
        // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果
        kzMetaNodesVO.setChildren(childTree);
        return kzMetaNodesVO;
    }
}

3.入参DTO

package com.jiuheng.smartCard.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Data
public class metaNokesDTO {


    @Schema(description = "业务类型code")
    private String typeCode;
}

4.返参

package com.jiuheng.smartCard.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class KzMetaNodesVO {
    /*
    * 名称
    * */
    private String name;

    /*
    * 父ID(顶级父ID为0)
    * */
    private String pid;

    /*
    * value
    * */
    private String id;

    /*
    * 主键ID
    * */
    private String codeId;

    /*
    * 备注说明
    * */
    private String remarks;

    /*
    * 子集,集合
    * */
    private List<KzMetaNodesVO> children;
}

5.代码编写

        1.controller

@GetMapping("/metaNodesMode")
    @Operation(summary = "查询树结构")
    public CommonResult metaNodesMode(@Valid metaNokesDTO dto) {
        List<KzMetaNodesVO> result = kzProductService.metaNodesMode(dto);
        return CommonResult.success(result);
    }

        2.service

List<KzMetaNodesVO> metaNodesMode(metaNokesDTO dto);

        3.serviceImpl

@Override
    public List<KzMetaNodesVO> metaNodesMode(metaNokesDTO dto) {
        //查询出全部类型数据
        List<KzMetaNodesVO> result = kzProductDao.seleTypecode(dto);
        //树结构工具类
        TreeBuildUtil treeBuildUtil = new TreeBuildUtil(result);
        result = treeBuildUtil.buildTree();
        return result;
    }

        4.dao

List<KzMetaNodesVO> seleTypecode(metaNokesDTO dto);

        5.mapper

<select id="seleTypecode" resultType="com.jiuheng.smartCard.vo.KzMetaNodesVO">
        SELECT
                `name`,
                 pid,
                `value` AS id,
                 id AS codeId,
                 remarks
        FROM
                kz_meta_nodes
        WHERE
                type_code = #{typeCode} and status=0
        order by sort asc
    </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值