MyBatis树形结构查询
来源:互联网 发布:plsql 两个数据库导表 编辑:程序博客网 时间:2024/06/04 19:39
前言
对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父ID关联来实现的,还有就是基于左右值编码设计。本文以继承关系设计的树形结构来讨论下MyBatis树形结构查询。以深度为二的树为例,要将这种结构的数据查询出来,通常的做法是先查询一级数据,再查询二级数据,然后在程序里组装起来,想了下,其实还可以更简单,不用分开两次,就能将不同级别数据一次性查询映射出来。
1.数据准备
以区域表为例,数据如下
SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for area-- ----------------------------DROP TABLE IF EXISTS `area`;CREATE TABLE `area` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK', `area_name` varchar(50) NOT NULL COMMENT '地区名称', `parent_id` int(11) NOT NULL COMMENT '父Id', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=7668 DEFAULT CHARSET=utf8 COMMENT='地区表';-- ------------------------------ Records of area-- ----------------------------INSERT INTO `area` VALUES ('1', '广东省', '0');INSERT INTO `area` VALUES ('2', '深圳市', '1');INSERT INTO `area` VALUES ('3', '广州市', '1');INSERT INTO `area` VALUES ('4', '湖南省', '0');INSERT INTO `area` VALUES ('5', '长沙市', '4');INSERT INTO `area` VALUES ('6', '株洲市', '4');
2.实体类
public class Area { private Integer id; private String areaName; private Integer parentId; List<Area> children; //getter setter}
3.查询sql
SELECT t_top.id AS id1, t_top.area_name AS area_name1, t_top.parent_id AS parent_id1, t_second.id AS id2, t_second.area_name AS area_name2, t_second.parent_id AS parent_id2 FROM ( SELECT id, area_name, parent_id FROM area WHERE parent_id = 0 ) AS t_top INNER JOIN ( SELECT id, area_name, parent_id FROM area WHERE parent_id IN ( SELECT id FROM area WHERE parent_id = 0 ) ) AS t_second ON t_top.id = t_second.parent_id
基本思路就是将一级区域查询出来作为临时表t_top,将二级区域查询出来作为临时表t_second,然后将两张表做inner join操作,查询结果:
4.ResultMap映射
<resultMap id="TreeResultMap" type="com.domain.Area" > <id column="id1" property="id" jdbcType="INTEGER" /> <result column="area_name1" property="areaName" jdbcType="VARCHAR" /> <result column="parent_id1" property="parentId" jdbcType="INTEGER" /> <collection property="children" ofType="com.hzins.mssql.domain.Area"> <id column="id2" property="id" jdbcType="INTEGER" /> <result column="area_name2" property="areaName" jdbcType="VARCHAR" /> <result column="parent_id2" property="parentId" jdbcType="INTEGER" /> </collection> </resultMap>
单元测试结果:
2 0
- MyBatis树形结构查询
- Oracle树形结构查询
- 树形结构查询
- ORACLE树形结构查询
- 树形结构查询过程
- oracle树形结构查询
- 查询树形结构
- 树形结构查询
- Oracle树形结构查询
- Oracle查询树形结构
- Oracle树形结构查询
- 循环查询 树形结构
- Oracle查询树形结构
- Oracle查询树形结构
- Orcale查询树形结构
- oracle 树形结构查询
- /*Oracle树形结构查询*/
- 查询文件夹树形结构
- C#60课的主要内容
- python爬虫入门
- ios断言的使用(NSAssert)
- liferay调度器-定时任务
- android问题:11-24 01:57:06.230: W/dalvikvm(1325): threadid=1: thread exiting with uncaught exception (
- MyBatis树形结构查询
- 在javascript里 startsWith 或者 endsWith 这样的方法
- CXF系列之SOAP消息格式
- 深入学习spring-boot系列(一)--spring-boot系列开篇
- iOS开发中点击推送跳转到指定页面
- HIVE安装
- HITS算法的测试
- Hadoop辅助排序一例小结
- Domino Java代理中第三方jar包需要调用dll文件