若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId

id:主键id,

parentId:父id

levelId:表示第几级(表本身关联查询的时候需要用到,不然会有重复数据)

利用mybatis collection 实现一对多关联查询

Dto:(一级)

public class ProvinceInfoDTO implements Serializable {
private String id;
private String name;
private String pinyin;
private String firstLetter;
private List<CitysInfoDTO> cities;
}

Dto:(二级)

public class CitysInfoDTO implements Serializable {
private String id;
private String name;
private String pinyin;
private String firstLetter;
private String acronym;
private List<RegionInfoDTO> regions;
}

Dto(三级)

public class RegionInfoDTO implements Serializable {
private String id;
private String name;
private String pinyin;
private String firstLetter;
}
resultMap
<resultMap id="unloadAreaQueryResultMap" type="com.haoyunhu.res.ProvinceInfoDTO">   // 一级
<result column="aid" property="id"/>
<result column="aname" property="name"/>
<result column="apinyin" property="pinyin"/>
<result column="aletter" property="firstLetter"/>
<collection property="cities" ofType="com.haoyunhu.res.CitysInfoDTO"> //二级
<result column="bid" property="id"/>
<result column="bname" property="name"/>
<result column="bpinyin" property="pinyin"/>
<result column="bletter" property="firstLetter"/>
<result column="bacronym" property="acronym"/>
<collection property="regions" ofType="com.haoyunhu.res.RegionInfoDTO"> // 三级
<result column="cid" property="id"/>
<result column="cname" property="name"/>
<result column="cpinyin" property="pinyin"/>
<result column="cletter" property="firstLetter"/>
</collection>
</collection>
</resultMap>

省市区级联查询sql:

SELECT a.PROV_NAME,

b.PROV_NAME,

c.PROV_NAME

FROM T_DATA_AREAS a

LEFT JOIN T_DATA_AREAS b

ON a.id=b.PROV_PARENTID

LEFT JOIN T_DATA_AREAS C

ON b.id =C.PROV_PARENTID

WHERE a.PROV_LEVELTYPE=1

AND b.PROV_LEVELTYPE =2

AND c.PROV_LEVELTYPE =3

ORDER BY a.PROV_NAME;

以上mybatis的操作最终得到的json是:

{

    "id":"310000",
"name":"上海",
"pinyin":"Shanghai",
"firstLetter":"",
"cities":[
{
"id":"310100",
"name":"上海市",
"pinyin":"Shanghai",
"firstLetter":"",
"acronym":"",
"regions":[
{
"id":"230506",
"name":"宝山区",
"pinyin":"Baoshan",
"firstLetter":""
}
]
}
] }

一对多关联查询单边分页:

上述的这种关联查询时没法直接使用pagehelper分页插件的,因为pagehelper分页插件是针对真个sql 截取,所以只能手动分页(简单,分页无非就是截取sql +查询总条数),

所以若一对多关联查询想分页得针对主表(案例中的A表)截取sql(pageindex pagesize) ,再另外写条sql查询主表(案例中的A表)的记录数 ------注意mysql 的偏移量的概念

还需要注意的坑:

1:这种需要做级联查询,表结构又不满足的坑:若表结构不满足,但是又想省事,就得写sql 把原表整成这种固定格式的临时表结构(子查询)

2:电商领域的商品类目的级联查询和这个省市区的查询一样(都需要levelid,用在查询条件处:where a.levelid=0 and b.levelid=1  and  c.levelid=2;  当然这种级联查询可以在java代码中可以实现,三条sql,分别查询 level  =0  1  2的,然后java代码里面循环!

mybatis collection 一对多关联查询,单边分页的问题总结!的更多相关文章

  1. MyBatis:一对多关联查询

    MyBatis从入门到放弃四:一对多关联查询 前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collecti ...

  2. mybatis 13: 一对多关联查询

    业务背景 根据客户id查询客户基本信息,以及客户存在的订单信息 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer id; private String ...

  3. mybatis一对多关联查询+pagehelper->分页错误

    mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...

  4. 7.mybatis一对多关联查询

    和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...

  5. MyBatis从入门到放弃四:一对多关联查询

    前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...

  6. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  7. mybatis一对多关联查询——(九)

    1.需求: 查询所有订单信息及订单下的订单明细信息. 订单信息与订单明细为一对多关系. 2.      sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关 ...

  8. MyBatis初级实战之六:一对多关联查询

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. MyBatis多对一,一对多,多对多,一对多关联查询

    一.Person实体类 1 public class Person { 2 private Integer personId; 3 private String name; 4 private Int ...

随机推荐

  1. Linux 后台任务

    1 我想把updatedb命令(用于重新建立整盘索引的命令)放在后台运行. # updatedb & [1] 23336 注释:在所要执行的命令后面加上空格,再加上&符号即可实现后台执 ...

  2. jQuery 和其他 JavaScript 框架

    正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写. 如果其他 JavaScript 框架也使用 $ 符号作为简写怎么办? 其他一些 JavaScript 框架包括:MooTo ...

  3. [转]Maven2中snapshot快照库的使用

    Post by 铁木箱子 in Java, 技术杂谈 on 2011-10-28 12:12. [转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc[原文地址] ...

  4. sql server case when then

    http://blog.csdn.net/wuxiaokaixinguo/article/details/8895187

  5. week 6: kernel regression

    华盛顿大学 machine learning regression 第六周笔记. 普通的回归方法是基于training set的整体性进行训练的,如果训练数据集 具有明显的分段性,那么普通的回归方法预 ...

  6. 如何通过Mac 下的SVN拉取代码

    背景:今天入职了一家新单位,用的svn,我之前一直用的win下的git和svn,然后我现在用自己的mac开发,所以有了标题的疑问 博文由来:看了几个博客写的都很繁琐,看半天才能解决我的疑问,所以自己写 ...

  7. Codeforces Beta Round #25 (Div. 2)--A. IQ test

    IQ test time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  8. linux下shell程序(一)

    shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步:创建一个包含命令和控制结构的文件. 第二步:修改这个文件的权限使它可以执行.使用c ...

  9. [网络通信] OSI七层模型思维导图

    ISO:国际标准化组织:OSI:开放系统互联 (部分描述不准确和不详细)

  10. splay tree成段更新,成段查询poj3466

    线段树入门题,换成splay tree 来搞搞. #include <stdio.h> #include <string.h> #include <algorithm&g ...