前言
对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父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.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>
单元测试结果:

到此这篇关于mybatis树形结构查询的实现示例的文章就介绍到这了,更多相关mybatis树形结构查询内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论