Ø根据实际业务场景需求,对待办任务和已办任务需要进行分页查询
Ø先查询出所有的待办任务,然后根据任务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子查询