mybatis collection 一对多关联查询,单边分页的问题总结!
若想直接通过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 一对多关联查询,单边分页的问题总结!的更多相关文章
- MyBatis:一对多关联查询
MyBatis从入门到放弃四:一对多关联查询 前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collecti ...
- mybatis 13: 一对多关联查询
业务背景 根据客户id查询客户基本信息,以及客户存在的订单信息 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer id; private String ...
- mybatis一对多关联查询+pagehelper->分页错误
mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...
- 7.mybatis一对多关联查询
和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
- mybatis一对多关联查询——(九)
1.需求: 查询所有订单信息及订单下的订单明细信息. 订单信息与订单明细为一对多关系. 2. sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关 ...
- MyBatis初级实战之六:一对多关联查询
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- MyBatis多对一,一对多,多对多,一对多关联查询
一.Person实体类 1 public class Person { 2 private Integer personId; 3 private String name; 4 private Int ...
随机推荐
- OC 基础语法
:Obect c 与 c 语言的区别 () 后缀名不一样,C语言是.c 结尾 ,OC 是 .h结尾. () 输出信息不同 C语言是用print() 输出,OC 是用NSLog输出. () NSLog会 ...
- python 爬虫实战1 爬取糗事百科段子
首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 本篇目标 抓取糗事百科热门段子 过滤带有图片的段子 实现每按一次回车显示一个段子的发布时间,发布人 ...
- ubuntu 中wget (下载)命令用法
Linux wget是一个下载文件的工具,它用在命令行下. 对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器 1.使用wget下载单个文件 ...
- ios -本地存储和查看json数据
1.代码创建json文件,并保存到本地 第一步.设置json文件的保存路径 NSString *filePath = [NSHomeDirectory() stringByAppendingStr ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.2——将Eclipse开发的项目导入到AndroidStudio
问题: 你想要将一个Eclipse ADT项目导入到Android Studio中. 解决方案: Android Studio提供了一个导入向导,可以重写已有的项目. 详细: 在Android Stu ...
- 【BZOJ1941】[Sdoi2010]Hide and Seek KDtree
[BZOJ1941][Sdoi2010]Hide and Seek Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了 ...
- 《从零开始学Swift》学习笔记(Day 13)——数据类型之整型和浮点型
Swift 2.0学习笔记(Day 13)——数据类型之整型和浮点型 原创文章,欢迎转载.转载请注明:关东升的博客 Swift提供8.16.32.64位形式的有符号及无符号整数.这些整数类型遵循 ...
- 关于在react和node中,经常出现的const
const是定义一个常量,在ECM6当中,定义局部变量可以用let.定义全局变量用var......这是ECM6的新特性,好吧,包子在这里只是记录一下,希望大家在将来写react或者node的时候,不 ...
- MVC5学习系列
前言 嗷~小弟我又出现了~咳咳..嚎过头了, 先说一说为什么写这个吧,~首先肯定是我自己需要学(废话 - -,)//,之前也写过MVC4的项目,嗯..但是仅限于使用并没有很深入的每个模块去了解, 这段 ...
- kubectl工具的windows安装方法
1.首先安装Chocolatey 参考:https://chocolatey.org/install#install-with-powershellexe windows7+以上操作系统的cmd sh ...