若想直接通过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. mysql 索引优化,索引建立原则和不走索引的原因

    第一:选择唯一性索引 唯一性索引的值是唯一的,可以更快捷的通过该索引来确定某条记录. 2.索引的列为where 后面经常作为条件的字段建立索引 如果某个字段经常作为查询条件,而且又有较少的重复列或者是 ...

  2. 个人博客开发之xadmin与ueditor集成

    项目源码下载:http://download.vhosts.cn 1. xadmin 添加ueditor 插件 vim extra_apps\xadmin\plugins\ueditor.py #没有 ...

  3. Spring 核心组件工作原理简析

    Spring Framework 的核心组件有三个: Spring Core,Spring Context 和 Spring Beans,它们奠定了 Spring 的基础并撑起了 Spring 的框架 ...

  4. Servlet Session 跟踪

    HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录. 但是仍然有以下三种方式来维持 ...

  5. 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

    学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...

  6. azure绑定ssl,godaddy的ssl证书

    域名是godaddy 申请的,证书也是godaddy 购买的,DV证书. godaddy购买证书后,申请ssl,需要输入,csr.网上找的csr生成工具,我使用  https://myssl.com/ ...

  7. WPF的本质:数据和行为

    如果自己来做一个UI框架,我们会首先关注哪些方面?我想UI框架主要处理的一定包括两个主要层次的内容,一个是数据展现,另一个就是数据操作,所以UI框架必须能够接收各种不同的数据并通过UI界面展现出来,然 ...

  8. awk合并两个文件并显示

    问题: 答案:

  9. LoadRunner 测试java代码

    LR12 JDK 1.7,32位 环境变量配好 待测的java jar包及其依赖的jar包都整理好,放在jdk的lib目录下,也要把jar包放在脚本目录下! =====>新建Java Vuser ...

  10. js 的函数参数的默认值问题

    js函数参数设置默认值   php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simu ...