针对父子级数据目录查询, 以前都是逐级的去根据父级id查询子集目录, 查出后最后再在代码中拼成树形结构, 相当复杂,我们可以利用 mybatis 提供的 collection 标签自动组织树形结构, 接下来我们一步一步看该如何建立

1.建表语句

CREATE TABLE `parent_child` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,`parent_id` int(11) DEFAULT NULL COMMENT '父级id',`create_time` varchar(32) NOT NULL,PRIMARY KEY (`id`) USING BTREE,KEY `index_parent_child_id` (`id`) USING BTREE,KEY `index_type_name` (`name`) USING BTREE,KEY `index_parent_id` (`parent_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;INSERT INTO `parent_child` VALUES ('1', '0-1', '0', '2022-09-13 11:59:13');
INSERT INTO `parent_child` VALUES ('2', '0-2', '0', '2022-09-13 11:59:28');
INSERT INTO `parent_child` VALUES ('3', '0-3', '0', '2022-09-13 14:01:20');
INSERT INTO `parent_child` VALUES ('4', '1-1', '1', '2022-09-13 14:01:41');
INSERT INTO `parent_child` VALUES ('5', '1-2', '1', '2022-09-13 14:01:58');
INSERT INTO `parent_child` VALUES ('6', '1-3', '1', '2022-09-13 14:02:11');
INSERT INTO `parent_child` VALUES ('7', '2-1', '2', '2022-09-13 14:02:24');
INSERT INTO `parent_child` VALUES ('8', '2-2', '2', '2022-09-13 14:02:49');
INSERT INTO `parent_child` VALUES ('9', '2-3', '2', '2022-09-13 14:03:03');
INSERT INTO `parent_child` VALUES ('10', '3-1', '3', '2022-09-13 14:03:16');
INSERT INTO `parent_child` VALUES ('11', '3-2', '3', '2022-09-13 14:03:28');
INSERT INTO `parent_child` VALUES ('12', '3-3', '3', '2022-09-13 14:03:39');
INSERT INTO `parent_child` VALUES ('13', '1-1-1', '4', '2022-09-13 14:04:05');
INSERT INTO `parent_child` VALUES ('14', '1-1-2', '4', '2022-09-13 14:04:19');
INSERT INTO `parent_child` VALUES ('15', '1-3-1', '6', '2022-09-29 14:04:34');
INSERT INTO `parent_child` VALUES ('16', '1-3-2', '6', '2022-09-13 14:04:45');
INSERT INTO `parent_child` VALUES ('17', '3-2-1', '11', '2022-09-13 14:05:07');
INSERT INTO `parent_child` VALUES ('18', '3-2-2', '11', '2022-09-13 14:05:22');
INSERT INTO `parent_child` VALUES ('19', '3-3-1', '12', '2022-09-13 14:05:37');
INSERT INTO `parent_child` VALUES ('20', '3-2-1-1', '17', '2022-09-30 14:06:02');
INSERT INTO `parent_child` VALUES ('21', '3-2-1-1-1', '20', '2022-09-13 14:06:19');
INSERT INTO `parent_child` VALUES ('22', '3-2-1-1-2', '20', '2022-09-09 14:06:36');

2.建立返回数据结构 VO

get set方法这里省略自行补上就行

public class ParentChildVo {private Integer id;private String name;private Integer parentId;private Date createTime;private List<ParentChildVo> children;
}

3.mybatis 编写查询语句

3.1 mapper文件:

    /***  查询树形目录* @param parentId* @return*/List<ParentChildVo> getParentChildTree(int parentId);

3.2 mybatis文件

  <!-- 树形结构 --><resultMap id="ParentChildTreeMap" type="com.ashen.game.common.vo.ParentChildVo"><id column="id" jdbcType="VARCHAR" property="id" /><id column="name" jdbcType="VARCHAR" property="name" /><id column="parentId" jdbcType="INTEGER" property="parentId" /><id column="createTime" jdbcType="VARCHAR" property="createTime" /><collection property="children" ofType="com.ashen.game.common.vo.ParentChildVo" column="id" select="getParentChildTree" fetchType="eager"/></resultMap><!--查询树形分组--><select id="getParentChildTree" resultMap="ParentChildTreeMap">SELECTa.id,a.name,a.parent_id as  parentId,a.create_time as createTimeFROM parent_child AS aWHEREa.parent_id = #{parentId}</select>

3.3 查询结果

{"data": [{"id": 1,"name": "0-1","parentId": 0,"createTime": "2022-09-13 11:59:13","children": [{"id": 4,"name": "1-1","parentId": 1,"createTime": "2022-09-13 14:01:41","children": [{"id": 13,"name": "1-1-1","parentId": 4,"createTime": "2022-09-13 14:04:05","children": []},{"id": 14,"name": "1-1-2","parentId": 4,"createTime": "2022-09-13 14:04:19","children": []}]},{"id": 5,"name": "1-2","parentId": 1,"createTime": "2022-09-13 14:01:58","children": []},{"id": 6,"name": "1-3","parentId": 1,"createTime": "2022-09-13 14:02:11","children": [{"id": 15,"name": "1-3-1","parentId": 6,"createTime": "2022-09-29 14:04:34","children": []},{"id": 16,"name": "1-3-2","parentId": 6,"createTime": "2022-09-13 14:04:45","children": []}]}]},{"id": 2,"name": "0-2","parentId": 0,"createTime": "2022-09-13 11:59:28","children": [{"id": 7,"name": "2-1","parentId": 2,"createTime": "2022-09-13 14:02:24","children": []},{"id": 8,"name": "2-2","parentId": 2,"createTime": "2022-09-13 14:02:49","children": []},{"id": 9,"name": "2-3","parentId": 2,"createTime": "2022-09-13 14:03:03","children": []}]},{"id": 3,"name": "0-3","parentId": 0,"createTime": "2022-09-13 14:01:20","children": [{"id": 10,"name": "3-1","parentId": 3,"createTime": "2022-09-13 14:03:16","children": []},{"id": 11,"name": "3-2","parentId": 3,"createTime": "2022-09-13 14:03:28","children": [{"id": 17,"name": "3-2-1","parentId": 11,"createTime": "2022-09-13 14:05:07","children": [{"id": 20,"name": "3-2-1-1","parentId": 17,"createTime": "2022-09-30 14:06:02","children": [{"id": 21,"name": "3-2-1-1-1","parentId": 20,"createTime": "2022-09-13 14:06:19","children": []},{"id": 22,"name": "3-2-1-1-2","parentId": 20,"createTime": "2022-09-09 14:06:36","children": []}]}]},{"id": 18,"name": "3-2-2","parentId": 11,"createTime": "2022-09-13 14:05:22","children": []}]},{"id": 12,"name": "3-3","parentId": 3,"createTime": "2022-09-13 14:03:39","children": [{"id": 19,"name": "3-3-1","parentId": 12,"createTime": "2022-09-13 14:05:37","children": []}]}]}],"message": "ok","code": 0,"count": null,"token": null
}

4.常见报错

服务处理异常:

Type definition error: [simple type, class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl];
nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
(through reference chain: com.dataojo.docloud.model.vo.ResultMap[\"data\"]->java.util.ArrayList[0]->com.dataojo.docloud.model.vo.DirectoryGroupTreeVo_$$_jvstb9_0[\"children\"]->java.util.ArrayList[0]->com.dataojo.docloud.model.vo.DirectoryGroupTreeVo_$$_jvstb9_0[\"children\"]->java.util.ArrayList[0]->com.dataojo.docloud.model.vo.DirectoryGroupTreeVo_$$_jvstb9_0[\"handler\"])
  • 报错原因:在mabatis中sql查询时,使用了进行一对多的查询,而collection默认的为懒加载,所以导致return 给前端时报错, 加上 fetchType=“eager” 即可。

完整示例代码

mybatis 父子级树形结构查询相关推荐

  1. Android - N级树形结构实现

    目前已经实现3级之内的任意级树形结构展示(如果想增加更多级,需要扩展排序算法),并支持单选和多选(使用不同的适配器). 实现使用的控件:ListView 首先,最重要的应该是数据源的格式,支持树形结构 ...

  2. mysql 查询树形结构_MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  3. Redmine 父子问题树形结构显示技巧

    (2015-03-31 16:35:19) 在 redemine 问题列表时,如果需要显示父子关系树形,则要求顺序按父在子前面的方式排序,假设按主题排序.可以在主题的序号和文本间加多一个空格. 在甘特 ...

  4. oracle11.2g递归查询(树形结构查询)

    转自: 一 二 简单语法介绍 一.树型表结构: 节点ID 上级ID 节点名称 二.公式: select 节点ID,节点名称,level from 表 connect by prior 节点ID=上级节 ...

  5. mysql树形结构查询_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  6. mysql 递归查询树型结构_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  7. mysql 树形结构 sql_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  8. mysql存储树结构_mysql 树形结构查询(存储过程)

    就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER//dropprocedureifexistsfindLC ...

  9. Oracle树形结构查询之prior的理解

    --1 建表 create table 宇宙 ( 行星等级 number ,行星名称 varchar2(50) ,上级行星等级 number ); --2 数据准备 insert into 宇宙 (行 ...

最新文章

  1. c语言放空一个数组,C++语言
  2. web项目中遇到的Maven包依赖冲突问题解决
  3. linux测试dvi接口,液晶显示器DVI接口及测试规范.pdf
  4. MapReduce分析NCDC 年气象数据最低温度与最高温度
  5. 游戏中汉字显示的实现与技巧
  6. [转载] Python命名空间和作用域
  7. 手机上最好用的五笔输入法_手机输入法哪家最好用?我推荐百度,不好用你打我...
  8. python google earth_如何用python编程控制GoogleEarth
  9. 2020 CCF-CSP-S-第一轮-C++ 模拟试卷(五)--有答案
  10. Python—网络编程_Mail
  11. [记录] 基于STC89C52RC的贪吃蛇三色游戏机设计(内含点阵驱动、数码管驱动详解)
  12. 树的左视图(Java)
  13. java爬虫模拟post请求_java爬虫之使用HttpClient模拟浏览器发送请求方法详解
  14. 一款界面友好的思维导图软件MindMaster
  15. 基于cc2530超声波测距报警系统
  16. 【图像超分辨率重建】——GRL论文精读笔记
  17. 解决微信小程序自定义tabbar跳转页面图标闪动问题
  18. Phonics 自然拼读法 s,a,t,i,p,n Teacher:Lamb
  19. 17世纪初诞生了第一台电子计算机,世界上第一台计算机诞生于多少年?
  20. [BZOJ1933][Shoi2007]Bookcase 书柜的尺寸(DP)

热门文章

  1. 最近很火的程序员成语,你知道几个?
  2. leet160:相交链表
  3. android限制app运行时间限制,android app 限制app使用时间
  4. 高二计算机课程难点,巧用信息技术手段 突破高中数学课堂教学的重难点
  5. 计算机平均值的快捷键,excel求平均值快捷键
  6. 无线路由器及Wi-Fi组网指南(史上最全)
  7. 编码:隐匿在计算机软硬件背后的语言pdf-Code:The Hidden Language of Computer Hardware and Software-Charles Petzold-pdf
  8. Jungle Scout中国市场首发亚马逊FBA卖家百万美金案例中文版详解
  9. 日本企业遭遇严重用工短缺
  10. 【菜鸟C++学习杂记】ASCII码转换和显示