最近做的一个项目使用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;
}
1123

被折叠的 条评论
为什么被折叠?



