1.初始化数据库数据

DROP TABLE IF EXISTS `t_domain`;
CREATE TABLE `t_domain` (
  `id` varchar(36) NOT NULL,
  `domain_name` varchar(20) NOT NULL COMMENT '区划名称',
  `parent_domain_id` varchar(36) DEFAULT NULL COMMENT '父区划id',
  `domain_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '区划类型 1销售区划 2运营区划',
  `data_status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1:正常,2:冻结,3:删除',
  `create_time` datetime DEFAULT NULL,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='区划表';

-- ----------------------------
-- Records of t_domain
-- ----------------------------
INSERT INTO `t_domain` VALUES ('0', '全国', null, '1', '1', null, '2019-03-15 11:28:16');
INSERT INTO `t_domain` VALUES ('2042bbee-9688-4741-bd9e-6579f186531a', '湘潭', 'dd7460f7-019e-45b9-ab16-44f2bc12a132', '2', '1', '2019-03-06 00:24:30', '2019-03-06 14:24:29');
INSERT INTO `t_domain` VALUES ('544897dc-bb5b-4f22-8483-19e89175f00e', '祁东1hao', 'd5d63419-3e81-406c-8993-0a4f5f943fc8', '1', '1', '2019-03-05 01:35:37', '2019-03-05 15:40:05');
INSERT INTO `t_domain` VALUES ('67bf668a-35cc-4051-90a0-5f4a78251d59', '长沙', 'a8d20afd-6759-49d4-ac0b-c71214b7546b', '1', '1', '2019-03-05 00:36:39', '2019-03-05 14:36:39');
INSERT INTO `t_domain` VALUES ('68639fd5-1deb-4975-bc9f-c516739b4ebd', '山东大区', '0', '1', '1', '2019-03-05 00:15:04', '2019-03-05 14:15:04');
INSERT INTO `t_domain` VALUES ('6ab58032-2df5-4edc-a4e5-8f8b6d45ead8', '祁东2hao', 'd5d63419-3e81-406c-8993-0a4f5f943fc8', '1', '1', '2019-03-05 00:42:23', '2019-03-05 15:40:09');
INSERT INTO `t_domain` VALUES ('a69dbe97-f5ea-4e7c-af34-fd182d413215', '祁东type2', 'd5d63419-3e81-406c-8993-0a4f5f943fc8', '2', '1', '2019-03-05 02:54:15', '2019-03-05 16:54:15');
INSERT INTO `t_domain` VALUES ('a8d20afd-6759-49d4-ac0b-c71214b7546b', '湖南大区', '0', '1', '1', '2019-03-05 00:35:18', '2019-03-05 14:35:18');
INSERT INTO `t_domain` VALUES ('c64f09e5-9bb8-4099-b27c-14c8176cfd82', '湘潭', 'a8d20afd-6759-49d4-ac0b-c71214b7546b', '2', '1', '2019-03-05 02:55:38', '2019-03-05 16:55:38');
INSERT INTO `t_domain` VALUES ('d5d63419-3e81-406c-8993-0a4f5f943fc8', '衡阳', 'a8d20afd-6759-49d4-ac0b-c71214b7546b', '1', '1', '2019-03-05 00:37:08', '2019-03-05 14:37:08');
INSERT INTO `t_domain` VALUES ('dd7460f7-019e-45b9-ab16-44f2bc12a132', '湖南大区', '0', '2', '1', '2019-03-06 00:23:06', '2019-03-06 14:23:05');

代码新增数据:

//  分与权限的区划添加,包括销售区划和运营区划
@Test
public void test01(){Example example = new Example(TDomain.class);int totalCount = domainMapper.selectCountByExample(example);if(totalCount == 0){    //  如果表里没数据,加个全国进去TDomain bean = new TDomain();bean.setId("0");bean.setDomainName("全国");bean.setCreateTime(new Date());domainMapper.insertSelective(bean);}//   如果是从全国添加大区,传0,否则就是取当前操作节点的id,如在大区上添加市,传大区的id,String parentId = "a8d20afd-6759-49d4-ac0b-c71214b7546b";//   区划类型 1销售区划 2运营区划int domain_type = 1;TDomain bean = new TDomain();bean.setId(UUID.randomUUID().toString());bean.setDomainName("株洲");bean.setParentDomainId(parentId);bean.setDomainType(domain_type);bean.setCreateTime(new Date());int i = domainMapper.insertSelective(bean);}

2.实体类,省略set,get

@Table(name = "t_domain")
public class TDomain {@Idprivate String id;private String domainName;private String parentDomainId;private Integer domainType;@JSONField(serialize = false)private Integer dataStatus;@JSONField(serialize = false)private Date createTime;@JSONField(serialize = false)private Date updateTime;private List<TDomain> childList = new ArrayList<>();

3.mapper代码

public interface DomainMapper extends Mapper<TDomain> {@Select("SELECT * FROM t_domain WHERE id = #{id} and data_status = 1")List<TDomain> getNode(@Param("id") String id);@Select("SELECT * FROM t_domain WHERE parent_domain_id = #{parentDomainId} and domain_type = #{domainType} and data_status = 1")List<TDomain> getNodeList(@Param("parentDomainId") String parentDomainId, @Param("domainType") int domainType);

4.方法代码及测试结果

@Test
public void test666(){TDomain quhua = recursiveTree("0",1);logger.info(IJsonUtils.toJson(quhua));
}
public TDomain recursiveTree(String id,int domainType) {    //  id为数据的主键IDTDomain node;List<TDomain> datas = domainMapper.getNode(id);if (datas.isEmpty()){return null;}else{node = datas.get(0);}List<TDomain> childTreeNodes = domainMapper.getNodeList(id,domainType);for(TDomain child : childTreeNodes){TDomain n = recursiveTree(child.getId(),domainType);node.getChildList().add(n);}return node;
}

[
    {
        "childList": [],
        "domainName": "山东大区",
        "domainType": 1,
        "id": "68639fd5-1deb-4975-bc9f-c516739b4ebd",
        "parentDomainId": "0"
    },
    {
        "childList": [
            {
                "childList": [],
                "domainName": "长沙",
                "domainType": 1,
                "id": "67bf668a-35cc-4051-90a0-5f4a78251d59",
                "parentDomainId": "a8d20afd-6759-49d4-ac0b-c71214b7546b"
            },
            {
                "childList": [
                    {
                        "childList": [],
                        "domainName": "祁东1hao",
                        "domainType": 1,
                        "id": "544897dc-bb5b-4f22-8483-19e89175f00e",
                        "parentDomainId": "d5d63419-3e81-406c-8993-0a4f5f943fc8"
                    },
                    {
                        "childList": [],
                        "domainName": "祁东2hao",
                        "domainType": 1,
                        "id": "6ab58032-2df5-4edc-a4e5-8f8b6d45ead8",
                        "parentDomainId": "d5d63419-3e81-406c-8993-0a4f5f943fc8"
                    }
                ],
                "domainName": "衡阳",
                "domainType": 1,
                "id": "d5d63419-3e81-406c-8993-0a4f5f943fc8",
                "parentDomainId": "a8d20afd-6759-49d4-ac0b-c71214b7546b"
            }
        ],
        "domainName": "湖南大区",
        "domainType": 1,
        "id": "a8d20afd-6759-49d4-ac0b-c71214b7546b",
        "parentDomainId": "0"
    }
]

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用mybatis自带递归查询功能实现:

1.mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--suppress SqlDialectInspection -->
<mapper namespace="com.wd.dao.privilege.DomainMapper"><resultMap id="SaleResult" type="com.wd.domain.po.TDomain"><id column="id" property="id"/><result column="domain_name" property="domainName" /><result column="parent_domain_id" property="parentDomainId" /><result column="domain_type" property="domainType" /><result column="data_status" property="dataStatus" /><result column="create_time" property="createTime" /><result column="update_time" property="updateTime" /><collection column="id" property="childList"ofType="com.wd.domain.po.TDomain"select="listForSale"></collection></resultMap><resultMap id="OperationResult" type="com.wd.domain.po.TDomain"><id column="id" property="id"/><result column="domain_name" property="domainName" /><result column="parent_domain_id" property="parentDomainId" /><result column="domain_type" property="domainType" /><result column="data_status" property="dataStatus" /><result column="create_time" property="createTime" /><result column="update_time" property="updateTime" /><collection column="id" property="childList"ofType="com.wd.domain.po.TDomain"select="listForOperation"></collection></resultMap><!--注意,递归查询只能跟一个条件--><!-- 递归查询所有,传最外层节点的parent_id值,数据库里的值,不能是null,比如定义parent_id=0表示最外层--><!--销售区划树查询--><select id="listForSale" resultMap="SaleResult">select * from t_domain where parent_domain_id = #{parentDomainId} and domain_type = 1;</select><!--运营区划树查询--><select id="listForOperation" resultMap="OperationResult">select * from t_domain where parent_domain_id = #{parentDomainId} and domain_type = 2;</select></mapper>

2.mapper代码

/*** 递归查询销售区划树** @param parentDomainId 传大区的parentDomainId,0哦,不能是null* @return*/
List<TDomain> listForSale(@Param("parentDomainId") String parentDomainId);/*** 递归查询运营区划树** @param parentDomainId 传大区的parentDomainId,0哦,不能是null* @return*/
List<TDomain> listForOperation(@Param("parentDomainId") String parentDomainId);

3.测试代码

//  销售区划树查询
@Test
public void test02(){String  parentDomainId = "0";List<TDomain> domains = domainMapper.listForSale(parentDomainId);String json = IJsonUtils.toJson(domains);logger.info(json);
}//  运营区划树查询
@Test
public void test03(){String  parentDomainId = "0";List<TDomain> domains = domainMapper.listForOperation(parentDomainId);String json = IJsonUtils.toJson(domains);logger.info(json);
}

递归查询树形结构数据相关推荐

  1. Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)

    前言 在做项目中我们会遇到树形结构数据,如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实 ...

  2. Java 递归查询部门树形结构数据

    说明:在开发中,我们经常使用树形结构来展示菜单选项,如图: 那么我们在后端怎么去实现这样的一个功能呢? 1.数据库表:department 2.编写sql映射语句 <select id=&quo ...

  3. oracle树状结构递归,Oracle:递归查询(树形结构数据)

    Oracle树形结构数据-相关知识总结 Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIAN ...

  4. java递归实现树形结构数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.树形结构是什么? 二.实现方案 1.stream流递归实现 1.1 实体类 1.2 实现类 2.jdk1.7以下实 ...

  5. Java 树形结构数据生成--不需要顶级节点

    概要 树形结构数据是后台开发中非常常见的一种数据结构.后台管理系统中必要的一种结构,常见的树形结构数据有,部门树,权限树等等,利用该数据结构可以让你的系统数据展示一目了然,并且为分配这些数据也提供了极 ...

  6. php 处理树形数据,php实现的树形结构数据存取类实例

    php实现的树形结构数据存取类实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  php实现的树形结构数据存取类实例.txt ] (友情提示:右键点上行txt文档 ...

  7. 构建树形结构数据(全部构建,查找构建)C#版

    摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...

  8. 树形结构数据, 已知某一子节点 ,一次向上获取所有父节点

    树形结构数据, 已知某一子节点 ,一次向上获取所有父节点 //tree: 树形结构, menuid: 已知节点属性,(代码中判断id相等) function treeFindPath(tree, me ...

  9. js过滤树形结构数据并获取新的树形结构

    工作中不时会遇见对树形结构数据的处理,有时候只需要遍历并获取其中一个属性值就行了(这部分内容请参考笔者的另一篇博客JS遍历树形结构方法),有时候我们则需要根据某些条件去过滤并得到新的树形结构数据. l ...

最新文章

  1. Info:Memory module [DIMM] needs attention: Single-bit warning error rate exceeded, Single-bit fai...
  2. python统计代码行数
  3. Leetcode 147.对链表进行排序
  4. java二叉树的序列化_二叉树的序列化和反序列化
  5. Linux入门之磁盘管理(3)文件系统挂载
  6. 【斜率优化】[CEOI2004]锯木厂选址——从这里开始斜率优化的大门
  7. 糖葫芦低通滤波器的设计
  8. r访问oracle数据库,R学习笔记之访问远程Oracle数据库
  9. 快速设置Revit模型材质(Dynamo和API)
  10. Linux CentOS7.0 使用root登录桌面
  11. 安装Matlab R2022a/64位
  12. Linux 使用nohup命令运行python文件
  13. root程序拆卸,把root软件删了
  14. 计算机绘图综合训练铣刀头实训报告,cad计算机绘图教学方案总结.docx
  15. Android变脸幕后的魔法师:各巨头…
  16. 人力资源系统技术标准
  17. 深度学习领域最新成果——“动态外科手术”算法
  18. Python-入门-函数(九)
  19. 抓取微信小程序数据包的三种方法
  20. iOS 支付宝页面无法跳转

热门文章

  1. 解决html5语意标签在IE低版本浏览器下的兼容问题:
  2. S5PV210_流水灯
  3. 贪心算法(一)假背包问题,圣诞老人的礼物
  4. #个人日记-电影《哆啦A梦:伴我同行2》观后感-20210530
  5. 码一些有用的东西网站的域名被拦截怎么办? 教你快速解除各种拦截
  6. linux tar 打包 解压包
  7. Google Earth Engine ——MOD11A1/A2 V6产品Emis_31和32波段下载
  8. 动态库链接boost静态库
  9. java中的jsp文件创建_在JSP中创建文件夹和文件
  10. PCIe 6.0时代即将到来 你准备好了吗?