正好现在在学习DRP,遇见了分页的问题,下边就来整理一下分页的思路,希望可以有一个好的理解。
下边就是分页的流程图
A.首先分装分页信息,将每页多少条数据,第几页,查询数据,结果集都封装起来
/**
* 封装分页信息
* @author 薛宇
*
*/
public class PageModel
{
//结果集
private List
list;
//查询记录数
private int totalRecords;
//每页多少条数据
private int pageSize;
//第几页
private int pageNO;
/**
* 总页数
* @return
*/
public int getTotalPages(){
return (totalRecords + pageSize -1) / pageSize;
}
/**
* 取得首页
* @return
*/
public int getTopPageNo(){
return 1;
}
/**
* 取得尾页
* @return
*/
public int getButtomPageNo(){
return getTotalPages();
}
/**
* 上一页
* @return
*/
public int getPreviousPageNo(){
if (pageNO <= 1) {
return 1;
}
return pageNO - 1;
}
/**
* 下一页
* @return
*/
public int getNextPageNo(){
if (pageNO >= getButtomPageNo()){
return getButtomPageNo();
}
return pageNO + 1;
}
public List
getList() {
return list;
}
public void setList(List
list) {
this.list = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNO() {
return pageNO;
}
public void setPageNO(int pageNO) {
this.pageNO = pageNO;
}
/**
* 分页查询
* @param pageNo
* @para, pageSize
* @return
*/
public PageModel
findUserList(int pageNo,int pageSize){
StringBuffer sbSql = new StringBuffer();
sbSql.append("select user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id ")
.append(") where rownum <= ? ")
.append(") where rn > ? ");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
PageModel
pageModel = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sbSql.toString());
pstmt.setInt(1, pageNo * pageSize);
pstmt.setInt(2, (pageNo - 1) * pageSize);
rs = pstmt.executeQuery();
List
userList = new ArrayList
();
while (rs.next()){
User user = new User();
user.setUserId(rs.getString("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setContactTel(rs.getString("contact_tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
userList.add(user);
}
pageModel = new PageModel
(); pageModel.setList(userList); pageModel.setTotalRecords(getTotalRecords(conn)); pageModel.setPageSize(pageSize); pageModel.setPageNO(pageNo); }catch(SQLException e){ e.printStackTrace(); }finally{ DbUtil.close(rs); DbUtil.close(pstmt); DbUtil.close(conn); } return pageModel; }
C.在JSP页面上显示
<%
int pageNo = 1;
int pageSize = 2;
String pageNoString = request.getParameter("pageNo");
if (pageNoString != null){
pageNo = Integer.parseInt(pageNoString);
}
PageModel
pageModel = UserManager.getInstace().findUserList(pageNo, pageSize);
%>
页面上迭代
<%
List
userList = pageModel.getList();
for (Iterator
iter=userList.iterator(); iter.hasNext();){
User user = (User)iter.next();
%>
<%=user.getUserId() %>
<%=user.getUserName() %>
<%=user.getContactTel()%>
<%=user.getEmail()%>
<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate())%>
<%
}
%>