iBATIS分页中有一个很吸引人的方法,queryForPaginatedList(java.lang.String id, int pageSize),可以返回 PaginatedList的对象,实现翻页,刚才测试了一下PaginatedList,在1-2w行数据的时候还可以工作,但是在一个30w行的表里翻页,一次select用了363.031second

忍不住看了一下源,发现iBATIS的分页依赖于数据库的jdbcDriver.
调用次序如下
- SqlMapClientImpl.queryForPaginatedList
 - ->SqlMapSessionImpl.queryForPaginatedList
 - ->SqlMapExecutorDelegate.queryForPaginatedList
 - ->GeneralStatement.executeQueryForList
 - ->GeneralStatment.executeQueryWithCallback
 - ->GeneralStatment.executeQueryWithCallback
 - ->SqlExecutor.executeQuery
 - ->SqlExecutor.handleMultipleResults()
 
iBATIS分页处理的函数如下
Java代码
- private void handleResults(RequestScope request, ResultSet rs, int skipResults, int maxResults, RowHandlerCallback callback); throws SQLException {
 - try {
 - request.setResultSet(rs);;
 - ResultMap resultMap = request.getResultMap();;
 - if (resultMap != null); {
 - // Skip Results
 - if (rs.getType(); != ResultSet.TYPE_FORWARD_ONLY); {
 - if (skipResults > 0); {
 - rs.absolute(skipResults);;
 - }
 - } else {
 - for (int i = 0; i < skipResults; i++); {
 - if (!rs.next();); {
 - return;
 - }
 - }
 - }
 - // Get Results
 - int resultsFetched = 0;
 - while ((maxResults == SqlExecutor.NO_MAXIMUM_RESULTS || resultsFetched < maxResults); && rs.next();); {
 - Object[] columnValues = resultMap.resolveSubMap(request, rs);.getResults(request, rs);;
 - callback.handleResultObject(request, columnValues, rs);;
 - resultsFetched++;
 - }
 - }
 - } finally {
 - request.setResultSet(null);;
 - }
 - }
 
返回的PaginatedList实际上是PaginatedDataList类的对象,每次翻页的时候最后都会调用
Java代码
- private List getList(int idx, int localPageSize); throws SQLException {
 - return sqlMapExecutor.queryForList(statementName, parameterObject, (idx); * pageSize, localPageSize);;
 - }
 
这个方法,可见iBATIS的分页机制要看jdbcDriver如何实现以及是否支持rs.absolute(skipResults)。
iBATIS分页的情况就介绍到这里,希望对你有所帮助。
【编辑推荐】
                网站名称:iBATIS分页的一些理解
                
                浏览地址:http://www.csdahua.cn/qtweb/news48/466598.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网