Pagehelper如何在指定位置添加分页

trytocatch 发布于 2016/10/10 18:51
阅读 2K+
收藏 0

@Liuzh_533 你好,想跟你请教个问题:

    我先描述一下这样一个场景,A,B两个表,A跟B是一对多的关系,现在要对A进行分页查询,并同时用join带出每个A所关联的所有的B,结合配置文件中的resultMap里的collection元素,是可以完美地构造业务对象的(A对象里有一个List存放关联的B)。

    但是,在此场景下,用pagehelper直接对整个查询的SQL进行分页就不对了,可不可以在指定的位置添加分页?比如对A表进行分页,其结果作为临时表再join B,实现方式的话,比如在SQL中通过注释的方式来指定添加分页的位置。

    我查了下资料,目前好像是没有这样的特性,以后是不是可以考虑加上呢?

加载中
0
Liuzh_533
Liuzh_533
没有任何方式可以解决嵌套查询的分页,只能通过手写sql控制分页的地方。
trytocatch
trytocatch
评论字数限制了,请看我在3楼的回复吧
0
trytocatch
trytocatch

引用来自“Liuzh_533”的评论

没有任何方式可以解决嵌套查询的分页,只能通过手写sql控制分页的地方。

ps:评论字数不够用

----------------------------


这么说可能太绝对了吧,据我了解,在sql添加/**/这种注释是SQL的标准语法,而且我测试了一下,在mapper中定义的sql中添加这种注释,mybatis也会把注释透传给数据库,如此一来,就可以用注释来作文章,比如:

select * from (/*start*/select * from a/*end*/) ta left join b tb on tb.ref_id = ta.id

我记得pagehelper是有解析sql的步骤的吧,那么可以通过解析“start”“end”这种注释标签,来知晓添加分页、排序的位置

trytocatch
trytocatch
回复 @Liuzh_533 : 这是该方法不利的地方吧,好处我觉得也有,如果一个复杂的查询,有时需要分页,有时要全量,那就可以避免定义两个查询,或者是dao的接口参数纯粹一些,跟pagehelper的用法保持一致
Liuzh_533
Liuzh_533
用注释确实可以这么做。但是和手写区别不大了吧?
返回顶部
顶部