记录一下

表结构为:

BKZ101 bigint(16) (NULL) NO PRI (NULL) select,insert,update,references DRGS疾病分组ID

BKA504 varchar(20) utf8_general_ci NO (NULL) select,insert,update,references 疾病分组编码

BKA505 varchar(300) utf8_general_ci NO (NULL) select,insert,update,references 疾病分组名称

BKA506 varchar(20) utf8_general_ci YES (NULL) select,insert,update,references 上一层编码

BKA503 varchar(3) utf8_general_ci NO (NULL) select,insert,update,references 层级(1:类目 2:亚目 3:细目 4:实用层)

嘛,总而言之就是一个有层级结构的表,mybatis查这种树结构靠的是collection。我们首先声明一个DTO和对应的resultMap,

DTO(com.zjrc.ssc.manager.bean.dto.DrgsTreeEntity):

private String title;

@Column( name="value1")

private String value;

@Column( name="key1")

private String key;

private List children;

resultMap:

ofType="com.zjrc.ssc.manager.bean.dto.DrgsTreeEntity"

select="selectNode"/>

很简单的map吧,result 标签是字段映射不提,关键是collection标签映射了DTO中的子节点列表,为什么要用value1,因为mysql拿value做别名会报错。

查询语句也很简单,父查询语句为:

SELECT BKA505 as title,BKA504 as value1,BKZ101 as key1 FROM

ka05

BKA503=1

LIMIT #{param.page},#{param.pageSize}

这个语句实际上就是查询了表中层级为1的节点,然后会触发collection中声明的子查询selectNode,子查询语句如下:

SELECT BKA505 as title,BKA505 as value1,BKZ101 as key1 FROM

ka05

bka506=#{id}

注意这里的#{id}和命名无关,始终会是collection中声明的column,这个column可以声明多个,当然这里不需要。子查询的resultMap和父查询的一致,这样就会递归查询下去了。

啊这个实际上是mybatis替我们做了遍历查询的工作,速度比我们在代码里写递归快,然后查到的数据直接塞进DTO很省事,但是还是做了N次查询。这种做法真的是最优的吗,有点怀疑。

然后collection中的select似乎无法添加条件判断,对于有最深度的树,相当于白做了最底层节点次数的查询,这也太浪费了吧,唔

mybatis mysql查询树形结构_mybatis树结构查询的方法相关推荐

  1. mybatis mysql查询树形结构_MyBatis collection 集合嵌套查询树形节点

    原标题:MyBatis collection 集合嵌套查询树形节点 MyBatis collection 集合 MyBatis 是数据持久层框架,支持定制化 SQL.存储过程以及高级映射.尤其强大在于 ...

  2. mysql 存储树形结构

    像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了. 举个栗子:现在有一个要存储一下公司的人员结构,大致层次结构如下: (画个图真不容 ...

  3. php 递归栏目名叠加,thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,thinkphp递归...

    thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,thinkphp递归 本文实例讲述了thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法.分享给大家供大家参考,具体如下: 这 ...

  4. mybatis mysql 树形结构_Mybatis查询树形结构数据

    数据表的设计 创建数据表 对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父ID关联来实现的. 一张树形结构的数据表基本的三个字段:id(自己).name(名称)和parentid(父类编 ...

  5. 解决 mysql 树形结构插入数据查询死循环问题

    在项目中,大家可能会遇到这样一个问题,就是当你操作那些具有上下级的树的表的时候,如果是单纯的父子级关系,可能不会碰见这个问题,但是如果这个看起来具有树形结构的表形成闭环的时候,问题就来了,我遇到的结果 ...

  6. mybatis 父子级树形结构查询

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

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

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

  8. 玩转Redis-Lua脚本入门到实战-树形结构存储及查询

      <玩转Redis>系列文章 by zxiaofan主要讲述Redis的基础及中高级应用,穿插企业实战案例.本文是<玩转Redis>系列第[16]篇,最新系列文章请前往 公众 ...

  9. 还在用递归查询 MySQL 的树形结构吗?教你一种更好的解决方案!

    点击关注公众号,实用技术文章及时了解 来源:juejin.cn/post/7076079848824766494 通常树形结构的存储,是在子节点上存储父节点的编号来确定各节点的父子关系,例如这样的组织 ...

最新文章

  1. Java日志的心路历程
  2. django 解决cors问题
  3. 如何从Java中打印XML?
  4. 松下服务器分频器输出信号与,基础资料松下PANASONIC伺服驱动器MADHT1507E
  5. python【蓝桥杯vip练习题库】ADV-136大数加法(高精度加法)
  6. .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
  7. 【音频处理】如何“认识”一个滤波器?
  8. MTK 驱动开发(42)---GAT 工具使用
  9. centos 6.5 安装rsync
  10. Springsecurity之认证过程简析
  11. STM32的AD通道干扰问题
  12. Python线程池简介
  13. arduino继电器控制风扇_如何基于Arduino制作DHT22控制的风扇
  14. 数据挖掘学习--主成分分析
  15. 看这里!有个奔向月薪7万的程序员专属规划!
  16. 做成事情的3个要素:意愿、能力、资源
  17. 基于改进正弦余弦算法的函数寻优算法
  18. 在linux系统上查看本机ip地址
  19. 什么是linux文件句柄,Linux中的“陈旧文件句柄”是什么意思?
  20. 设置 Ubuntu 联通宽带上网

热门文章

  1. 数据库存储过程语法总结
  2. eclipse介绍,环境配置,mysql安装
  3. 每日一练 通货膨胀-x国货币
  4. 深度学习训练营之识别宝可梦人物和角色
  5. mt2503如何更改短信息存储数目及SMS的segment数目
  6. html语言更改字体大小,在HTML中更改字体大小
  7. DG磁盘分区提示错误
  8. php cgminer,CGMINER中各个参数代表的意义(挖矿黑框参数)
  9. 小心这些没有硝烟的鸦片软件
  10. 人力资源SaaS系统哪家功能比较完善?