文档章节

Mybatis关联结果查询分页方法

Liuzh_533
 Liuzh_533
发布于 2014/06/05 22:17
字数 680
阅读 9739
收藏 37

#在Mybatis分页插件的说明中有如下内容 ##不支持的情况

对于关联结果查询,使用分页得不到正常的结果,因为只有把数据全部查询出来,才能得到最终的结果,对这个结果进行分页才有效。因而如果是这种情况,必然要先全部查询,在对结果处理,这样就体现不出分页的作用了。

对于关联嵌套查询,使用分页的时候,只会对主SQL进行分页查询,嵌套的查询不会被分页。

##对于不支持情况

  • 在Mybatis中没有任何简单的分页能实现该功能
  • 即使Mybatis的内存分页也不能实现关联结果查询的分页

##如果你不了解关联结果查询和关联嵌套查询
可以查看该专题进行了解。

##如何对关联结果进行分页?

  • 针对这种情况最好的方法就是手写分页,针对主要语句进行分页,对连接的表不进行分页查询
  • 针对主要语句写count查询(不需要管连接的表)
  • 这样一来,对嵌套的结果就没有影响了

##简单举例如下

<!-- lang: sql -->
select *
  from (select *
          from (select a.*, rownum rw from sys_role a where rownum <= 4)
         where rw > 0) a
  left join sys_role_function b on a.roleid = b.roleid;

这条语句分页限制为0到4,主分页语句限制为4条结果,实际结果是左连接后的结果,不止4条。
使用这种针对性的分页sql就能解决关联结果查询的问题。

##关于关联嵌套查询
嵌套查询由于都是独立的sql,主sql和分支sql都是分离的,所以使用Mybatis分页插件可以正常分页。如果你还想对关联查询的分支sql进行分页查询,基本上是不可能的,但是通过column={}这种方式传递分页参数也能实现,估计有些人看不懂这里了,就到此为止吧,不需要做这么费力不讨好的事。

##Mybatis分页插件地址:http://git.oschina.net/free/Mybatis_PageHelper

© 著作权归作者所有

共有 人打赏支持
Liuzh_533

Liuzh_533

粉丝 721
博文 21
码字总数 40530
作品 5
石家庄
程序员
加载中

评论(10)

Liuzh_533
Liuzh_533

引用来自“水元之素”的评论

【column={}这种方式传递分页参数】这个方法分页 请说明下吧 谢谢
http://blog.csdn.net/isea533/article/details/21007559
Liuzh_533
Liuzh_533

引用来自“水元之素”的评论

【column={}这种方式传递分页参数】这个方法分页 请说明下吧 谢谢
http://blog.csdn.net/isea533/article/details/21007559
A
Atom7
【column={}这种方式传递分页参数】这个方法分页 请说明下吧 谢谢
l
lantian123
我需要【column={}这种方式传递分页参数】这个方法分页。烦请写个例子吧。
learn_more
learn_more
select *
from (select *
from (select a.*, rownum rw from sys_role a where rownum <= 4)
where rw > 0) a
left join sys_role_function b on a.roleid = b.roleid;

对于这条sql语句分页是足够了,但是如果有查询条件的话,似乎有点勉强。比如我要查询的是sys_role_function 表中某个name字段满足条件的 sys_role 记录,是不是要这样写:
select *
from (select *
from (select a.*, rownum rw from sys_role a
     left join sys_role_function b2 on a.roleid = b2.roleid
     where rownum <= 4 and b2.name like '123%')
where rw > 0) a
left join sys_role_function b on a.roleid = b.roleid;

这里只有一张关联表所以很简单,如果多个关联表,那么相当于对每张表都进行了两次关联,这样分页真的好吗?
lgl48128244
lgl48128244

引用来自“撒哈拉的小猫”的评论

Mybatis是编程语言还是系统来的?--来自blog.clmao.com土豪版灌水机

引用来自“Liuzh_533”的评论

是一个持久化框架。。操作数据库的。。和hibernate是一类。
像此类问题就不必回复
KaneTing
KaneTing
这篇文章看得有点晕了,要在好好理解下!
KaneTing
KaneTing
牛!之前在oschina上看到mybatis分页插件,原来是楼主这位高人写的,佩服!!
准备试用这个分页插件在自己的项目中使用。
Liuzh_533
Liuzh_533

引用来自“撒哈拉的小猫”的评论

Mybatis是编程语言还是系统来的?--来自blog.clmao.com土豪版灌水机
是一个持久化框架。。操作数据库的。。和hibernate是一类。
欲望故事
欲望故事
Mybatis是编程语言还是系统来的?--来自blog.clmao.com土豪版灌水机
Mybatis 分页插件 3.2.0 发布

Mybatis分页插件 - PageHelper说明 V3.2.0: 统一返回值为Page(可以直接按List使用),方便在页面使用EL表达式,如${page.pageNum},${page.total} 解决count sql在oracle中的错误 增加了对H...

Liuzh_533
2014/06/09
5.7K
28
Mybatis 分页插件 3.0 发布

感谢大家的支持,通过收集建议,对分页插件做了多项改进。现在正式发布3.0版本。 v3.0 现在支持两种形式的分页,使用PageHelper.startPage方法或者使用RowBounds参数 PageHelper.startPage方...

Liuzh_533
2014/05/22
3.6K
54
Mybatis3.4.x技术内幕(二十三):Mybatis面试问题集锦(大结局)

Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目...

祖大俊
2016/09/17
10.9K
34
Java面试----2018年MyBatis常见实用面试题整理

Java面试----2018年MyBatis常见实用面试题整理 1、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 2、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存...

优惠券活动
04/29
0
0
MyEclipse2015整合SSM框架:详解Mybatis逆向工程配置一对一关联表,查询结果排序问题

MyEclipse2015整合SSM框架:详解Mybatis逆向工程配置一对一关联表,查询结果排序问题 先说问题:在搭建SSM(Spring+SpringMVC+Mybatis)框架,从后台数据库查询出数据提供给前端页面进行分页...

优惠券活动
04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shell特殊符号、cut、sort、uniq、wc、tee、tr、split命令

10月15日任务 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 cut 命令 cut作用:截取字符串 用法如下:cat /etc/passwd |head -2 |cut -d ...

hhpuppy
27分钟前
1
0
Springboot实现filter拦截token验证和跨域

背景 web验证授权合法的一般分为下面几种 1使用session作为验证合法用户访问的验证方式 使用自己实现的token 使用OCA标准 在使用API接口授权验证时,token是自定义的方式实现起来不需要引入其...

funnymin
今天
3
0
linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
14
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部