文档章节

Mybatis关联结果查询分页方法

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

#在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

粉丝 786
博文 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.8K
28
Mybatis 分页插件 3.0 发布

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

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

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

祖大俊
2016/09/17
10.9K
34
10 个 MyBatis 常见面试题

#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis在处理${}时,就是把${}替换成...

蚂蚁-Declan
2018/10/25
0
0
Java面试----2018年MyBatis常见实用面试题整理

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

优惠券活动
2018/04/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

c 基础教程六:c 循环结构

有的时候,我们可能需要多次执行同一块代码,c 语言提供了如下几种循环,各有特色。 while 循环 for 循环 do-while 循环 while 循环 只要给定的条件为真,C 语言中的 while 循环语句会重复执...

故城以南丶思念不安
31分钟前
4
0
spark 常见操作

为spark DataFrom 添加一个为 空的新列,使用UDF函数 想产生一个IntegerType类型列为null的DataFrame该怎么做。 import org.apache.spark.sql.functions._import org.apache.spark.sql.type...

蜉先生
42分钟前
2
0
Flutter for Web 详细预研

首先感谢@栖冰 @祖建国 一起对FFW的预研做的投入! 背景 Google在最新的Google I/O上推出了Flutter for Web,旨在进一步解决一次代码,多端运行的问题。Flutter for Web还处于早期试验版,官...

阿里云云栖社区
51分钟前
1
0
mongodb自动备份脚本

mongodb自动备份脚本 2019年04月08日 13:27:28 遗失的曾经! 阅读数 73 #!/bin/bash# 要备份的数据库名'多个数据库用空格分开# 备份文件要保存的目录basepath="/data/backup/dump$(da...

linjin200
52分钟前
2
0
如何使用pagehelper分页

<c:if test="${page != null && page.getTotal() > 0 }"> <nav style="text-align: center"><ul class="pagination pagination-lg"><li><a>共 ${page.total } 条记录</a></l......

南桥北木
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部