mybatis mysql查询树形结构_mybatis树结构查询的方法
记录一下
表结构为:
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树结构查询的方法相关推荐
- mybatis mysql查询树形结构_MyBatis collection 集合嵌套查询树形节点
原标题:MyBatis collection 集合嵌套查询树形节点 MyBatis collection 集合 MyBatis 是数据持久层框架,支持定制化 SQL.存储过程以及高级映射.尤其强大在于 ...
- mysql 存储树形结构
像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了. 举个栗子:现在有一个要存储一下公司的人员结构,大致层次结构如下: (画个图真不容 ...
- php 递归栏目名叠加,thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,thinkphp递归...
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,thinkphp递归 本文实例讲述了thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法.分享给大家供大家参考,具体如下: 这 ...
- mybatis mysql 树形结构_Mybatis查询树形结构数据
数据表的设计 创建数据表 对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父ID关联来实现的. 一张树形结构的数据表基本的三个字段:id(自己).name(名称)和parentid(父类编 ...
- 解决 mysql 树形结构插入数据查询死循环问题
在项目中,大家可能会遇到这样一个问题,就是当你操作那些具有上下级的树的表的时候,如果是单纯的父子级关系,可能不会碰见这个问题,但是如果这个看起来具有树形结构的表形成闭环的时候,问题就来了,我遇到的结果 ...
- mybatis 父子级树形结构查询
针对父子级数据目录查询, 以前都是逐级的去根据父级id查询子集目录, 查出后最后再在代码中拼成树形结构, 相当复杂,我们可以利用 mybatis 提供的 collection 标签自动组织树形结构, ...
- mysql 查询树形结构_MySql/Oracle树形结构查询
Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...
- 玩转Redis-Lua脚本入门到实战-树形结构存储及查询
<玩转Redis>系列文章 by zxiaofan主要讲述Redis的基础及中高级应用,穿插企业实战案例.本文是<玩转Redis>系列第[16]篇,最新系列文章请前往 公众 ...
- 还在用递归查询 MySQL 的树形结构吗?教你一种更好的解决方案!
点击关注公众号,实用技术文章及时了解 来源:juejin.cn/post/7076079848824766494 通常树形结构的存储,是在子节点上存储父节点的编号来确定各节点的父子关系,例如这样的组织 ...
最新文章
- Java日志的心路历程
- django 解决cors问题
- 如何从Java中打印XML?
- 松下服务器分频器输出信号与,基础资料松下PANASONIC伺服驱动器MADHT1507E
- python【蓝桥杯vip练习题库】ADV-136大数加法(高精度加法)
- .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
- 【音频处理】如何“认识”一个滤波器?
- MTK 驱动开发(42)---GAT 工具使用
- centos 6.5 安装rsync
- Springsecurity之认证过程简析
- STM32的AD通道干扰问题
- Python线程池简介
- arduino继电器控制风扇_如何基于Arduino制作DHT22控制的风扇
- 数据挖掘学习--主成分分析
- 看这里!有个奔向月薪7万的程序员专属规划!
- 做成事情的3个要素:意愿、能力、资源
- 基于改进正弦余弦算法的函数寻优算法
- 在linux系统上查看本机ip地址
- 什么是linux文件句柄,Linux中的“陈旧文件句柄”是什么意思?
- 设置 Ubuntu 联通宽带上网