- 我已在 issues 搜索类似问题,并且不存在相同的问题.
异常模板
使用环境
- PageHelper 版本: 5.1.10(所有版本)
分页参数
PageHelper.startPage(1,5).doSelectPage(()->sqlSessionTemplate.select("statement", handler));
或者
PageHelper.startPage(1,5).doSelectPage(()->xxxMapper.select(handler));
在使用分页时 并执行带有ResultHandler参数的查询时会出现异常,原因在于mybatis带handler参数查询时不会有返回结果
而在com.github.pagehelper.util.ExecutorUtil中 执行count查询后 会直接使用返回的list中的第一条数据
//执行 count 查询
Object countResultList = executor.query(countMs, parameter, RowBounds.DEFAULT, resultHandler, countKey, countBoundSql);
Long count = (Long) ((List) countResultList).get(0);
最终导致数组越界异常
完整异常信息
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at com.github.pagehelper.util.ExecutorUtil.executeAutoCount(ExecutorUtil.java:139)
at com.github.pagehelper.PageInterceptor.count(PageInterceptor.java:150)
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:97)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy160.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.select(DefaultSqlSession.java:169)
... 82 common frames omitted
功能建议
建议在Long count = (Long) ((List) countResultList).get(0); 判断一下countResultList的长度
1条答案
按热度按时间xxhby3vn1#
由于以上原因建议 : 在使用ResultHandler参数的查询时 handler肯定是用来处理info数据 而不是count数据 所以建议在
com.github.pagehelper.PageInterceptor#intercept中的
//查询总数
Long count = count(executor, ms, parameter, rowBounds, resultHandler, boundSql);
这里 直接使用count(executor, ms, parameter, rowBounds, null, boundSql)进行查询
避免handler逻辑处理count数据报错