成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iBATIS分頁源碼真相探討

開發 后端
iBATIS分頁源碼真相是什么?iBATIS是如何實現分頁的呢?那么本文將會給你介紹在實際工作中的一點體會。

iBATIS分頁源碼真相的探討,首先我們在iBATIS中有一個很吸引人的方法,queryForPaginatedList(java.lang.String id, int pageSize),可以返回 PaginatedList的對象,實現翻頁,剛才測試了一下PaginatedList,在1-2w行數據的時候還可以工作,但是在一個30w行的表里翻頁,一次select用了363.031second忍不住看了一下源,發現iBATIS的分頁依賴于數據庫的JDBC Driver.

調用次序如下SqlMapClientImpl.queryForPaginatedList->SqlMapSessionImpl.queryForPaginatedList

->SqlMapExecutorDelegate.queryForPaginatedList->GeneralStatement.executeQueryForList

->GeneralStatment.executeQueryWithCallback->GeneralStatment.executeQueryWithCallback

->SqlExecutor.executeQuery->SqlExecutor.handleMultipleResults()

iBATIS分頁處理的函數如下

  1. private void handleResults(RequestScope request, ResultSet rs, int skipResults, int maxResults, RowHandlerCallback callback) throws SQLException {  
  2.     try {  
  3.       request.setResultSet(rs);  
  4.       ResultMap resultMap = request.getResultMap();  
  5.       if (resultMap != null) {  
  6.         // Skip Results  
  7.         if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {  
  8.           if (skipResults > 0) {   
  9.  
  10.  
  11.             rs.absolute(skipResults);  
  12.           }  
  13.         } else {  
  14.           for (int i = 0; i < skipResults; i++) {  
  15.             if (!rs.next()) {  
  16.               return;  
  17.             }  
  18.           }  
  19.         }   
  20.  
  21.  
  22.         // Get Results  
  23.         int resultsFetched = 0;  
  24.         while ((maxResults == SqlExecutor.NO_MAXIMUM_RESULTS || resultsFetched < maxResults) && rs.next()) {  
  25.           Object[] columnValues = resultMap.resolveSubMap(request, rs).getResults(request, rs);  
  26.           callback.handleResultObject(request, columnValues, rs);  
  27.           resultsFetched++;  
  28.         }  
  29.       }  
  30.     } finally {  
  31.       request.setResultSet(null);  
  32.     }  
  33.   } 

返回的PaginatedList實際上是PaginatedDataList類的對象,每次翻頁的時候最后都會調用

  1. private List getList(int idx, int localPageSize) throws SQLException {   
  2.    return sqlMapExecutor.queryForList(statementName, parameterObject, (idx) * pageSize, localPageSize);  
  3.  } 

這個方法,可見iBATIS的分頁機制要看JDBC Driver如何實現以及是否支持rs.absolute(skipResults)。

這種實現肯定不如數據庫自己支持的分頁方式來的快,一旦碰到數據量大的表,有停滯的可能。

iBATIS分頁的源碼分析就到這里,希望你能對iBATIS分頁的根本有所了解。

【編輯推薦】

  1. iBATIS發展方向的四方面淺析
  2. iBATIS快速創建應用淺析
  3. iBATIS配置淺析
  4. iBATIS測試類的詳細寫法
  5. iBATIS使用之高級查詢技術詳解
責任編輯:仲衡 來源: Java天堂
相關推薦

2009-07-20 16:18:54

iBatis分頁Hibernate式的

2009-07-21 09:55:45

iBATIS分頁

2009-07-22 11:11:39

iBATIS分頁實例ObjectDataS

2011-05-03 09:40:58

iBatis

2010-05-06 14:01:12

Oracle分頁存儲過

2010-04-30 08:47:22

Oracle分頁存儲

2009-12-03 09:49:59

PHP分頁導航函數

2009-06-16 10:51:14

Java源碼

2009-07-15 15:47:49

iBATIS是什么

2009-07-21 11:12:00

iBATIS配置

2009-07-16 09:56:32

什么是iBATIS

2019-11-25 16:05:20

MybatisPageHelpeJava

2012-04-25 10:14:40

JavaStruts

2009-07-22 10:42:59

iBATIS Cach

2009-07-15 17:58:07

iBATIS 動態映射

2009-07-16 10:23:30

iBATIS工作原理

2009-07-24 17:20:59

iBatis配置

2009-07-15 11:43:13

<iterate>標簽

2009-07-16 11:21:19

ibatis主鍵自動生成

2009-09-21 16:56:14

Hibernateibatis
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品不卡一区二区三区 | 国产最新网址 | 欧美日韩不卡 | 日本特黄a级高清免费大片 成年人黄色小视频 | 欧美日韩在线综合 | 亚州精品天堂中文字幕 | 日韩一级不卡 | 国产麻豆乱码精品一区二区三区 | 欧美va大片 | 国产精品欧美一区二区三区 | 亚洲第一天堂无码专区 | 一本色道精品久久一区二区三区 | 国产精品久久久久久久久久久久久久 | 中文字幕在线不卡播放 | 亚洲第一天堂 | 久久国产精品久久久久 | 日本不卡免费新一二三区 | av一区二区三区 | 精品国产欧美日韩不卡在线观看 | 黄色一级视频 | 欧美日韩国产一区二区三区 | 久久极品 | www.日韩系列 | 久久噜噜噜精品国产亚洲综合 | 久久精品国产一区二区电影 | 一区二区在线观看av | 久久久久精 | 伊人最新网址 | 欧美黄色片 | 午夜在线精品 | 成人福利视频 | 日韩在线中文字幕 | 一区二区三区精品在线 | 午夜久久久 | 成人国产精品久久久 | 欧美精选一区二区 | www,黄色,com | 国产美女在线看 | 国产特级毛片aaaaaa喷潮 | 久久久xxx| 99re在线视频精品 |