MyBatis一对多关联查询+pagehelper分页错误

Ø根据实际业务场景需求,对待办任务和已办任务需要进行分页查询

Ø先查询出所有的待办任务,然后根据任务id查询出所有的变量

Ø查询一对多问题:分页插件不支持嵌套结果映射,由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确

解决办法
1:拆分sql查询语句,拿到任务id后通过程序遍历任务变量

1)在查询所有的基础上去除左连接查询任务变量sql语句

2)编写service层的实现时通过查询的代办任务遍历任务变量

缺点: 消耗的资源多,性能低,每一次查询都需要循环遍历一次任务id

优化: 在service层做判断,如果传入的page对象为空,我们就默认查询全部,传入page对象,我们就做分页查询,在service实现层和dao层有不同的方法对应

1)在mapper.xml中,增加实体bean的映射SubResultMap,在该映射中嵌套一个子查询selectRunProcVariable,主查询查询待办任务id,主查询得到的每一条记录,会去子查询查询一次

2)子查询selectRunProcVariable查运行时流程变量

mybatis一对多关联查询+pagehelper->分页错误。

现象:

image

网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585

解决:

pagehelper不支持这种查询:

https://github.com/pagehelper/Mybatis-PageHelper/issues/186

暂时解决方案:

collection标签里使用select属性指定子查询(缺点:查询次数增多)

todo:

实现自己的分页插件

实际解决

使用collection子查询

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容