NO IMAGE

最近做的一個專案使用jdbc實現後端分頁,下面對他進行簡單介紹:

整個分頁實現流程如下:

每個分頁都有自己的Pagination

pagnation中通常有以下幾項:

DEFAULT_PAGE_SIZE//預設每頁資料量
getCurrentPageNo()//獲取當前頁面number
getPageSize()//獲取頁面大小
getTotalCount()//取總記錄數
getTotalPageCount()//獲取總頁數
hasNextPage()//判斷是否有下一頁
hasPreviousPage()//判斷是否有上一頁

在專案中分頁部分的類和介面之間的關係如下:

Pagenation不僅僅用於jdbc實現的分頁系統。因此,針對jdbc實現的分頁有自己的IJdbcPage介面。

系統最終使用的是JdbcPage。

AbstractPagenation中的引數為:

protected intpageSize =DEFAULT_PAGE_SIZE;//每頁的記錄數

protected int start; //當前頁第一條資料在List中的位置,從0開始

protected inttotalCount; //總記錄數

我們是如何將sql查詢到的resultset填充到自己定義的datalist二維表中的呢?

方式如下:

jdbcTemplate返回的是一個resultSet,通過

ResultSetExtractor<DataList> rse = new ResultSetExtractor<DataList>() {
public DataList extractData(ResultSet rs) throws SQLException, DataAccessException {
return new JdbcPageDataList(rs);
}
};
//jdbc查詢產生的resultset會首先根據上面的extractData方法處理,產生一個JdbcPageDataList。
DataList dataList = jdbcTemplate.query(sqlLimit, obj, rse);
return new JdbcPage(startIndex, totalCount, pageSize, dataList);

產生一個符合datalist形式的結果。

JadcPageDataList的生成程式碼如下:

private void dealBody(ResultSet rs, int colCount) throws SQLException {
int rowNum = 0;
while (rs.next()) {
if (rs.getRow() == 0) {
break;
}
DSRow row = new DSRow(colCount);
rowList.add(row);
for (int col = 1; col <= colCount; col  ) {
Object obj = ColType.getResultSetValue(rs, col, getColType(col - 1));
addCell(rowNum, col - 1, (Comparable) obj);
}
rowNum  ;
}
}
private int dealHead(ResultSet rs) throws SQLException {
ResultSetMetaData resultSetMetaData = rs.getMetaData();
int colCount = resultSetMetaData.getColumnCount();
headerList = new ArrayList<DBHeader>(colCount);
for (int col = 1; col <= colCount; col  ) {
int colType = resultSetMetaData.getColumnType(col);//獲取此列的資料型別
DBHeader header = new DBHeader();
ColType type = ColType.parseSqlType(colType);
header.setColType(type);
header.setColDBName(resultSetMetaData.getColumnLabel(col));//返回此列暗含的標籤
headerList.add(header);
}
return colCount;
}