本文使用的是比较原始的方法实现分页查询,不涉及框架。
本文主要讨论的是面向对象的思想,部分过程(比如JSP的详细内容)不做讨论。
设计JavaBean
首先,我们想象一个具有基本功能的分页查询,它应该有哪些元素?
- 页面结构,包括页码、页数、数据总条数以及每页显示多少条数据。
- 要查询的数据信息,一般每页不止一条数据,所以这个数据是一个集合。
那么我们就可以把一个页面当成一个JavaBean对象,这个对象包含的属性有页面当前页码、总页数、数据总条数、每页显示的数据条数以及每页的数据集合。
当用户想要查询某一页的信息时,通过jsp页面向服务器发送请求,则请求中必定包含要查询的页码。也可以包含其他属性,比如每页显示多少条数据。我这里就发送了两个属性:页码和每页显示数据的条数。
public class PagingQuery<T> {
// 当前页码:显示或者想要显示的页码
// 页码要做整数比较,不能为空,不能为Integer
private int currentPageNumber;
// 总页数:查询到的结果,按需能分成多少页
private Integer totalPages;
// 每页条数:每页显示多少条结果
private Integer piecesPerPage;
// 总条数:总共查询到多少条结果
private Integer totalPieces;
// 每页存放的结果信息集合
private List<T> listOfInfoPerPage;
/**
* @return 获取页码数
*/
public int getCurrentPageNumber() {
return currentPageNumber;
}
/**
* @param currentPageNumber 设置需要设定的当前页码,值由页面指定,需要外部验证
*/
public void setCurrentPageNumber(int currentPageNumber) {
this.currentPageNumber = currentPageNumber;
}
/**
* @return 获取总页数
*/
public Integer getTotalPages() {
return totalPages;
}
/**
* @param totalPages 设置总页数:根据总条数和每页条数,设定总页数,需要外部验证
*/
public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
/**
* @return 获取每页条数
*/
public Integer getPiecesPerPage() {
return piecesPerPage;
}
/**
* @param piecesPerPage 设置每页条数,值由页面指定
*/
public void setPiecesPerPage(Integer piecesPerPage) {
this.piecesPerPage = piecesPerPage;
}
/**
* @return 获取总条数
*/
public Integer getTotalPieces() {
return totalPieces;
}
/**
* @param totalPieces 设定总条数,值由数据库指定
*/
public void setTotalPieces(Integer totalPieces) {
this.totalPieces = totalPieces;
}
/**
* @return 获取每页结果信息集合
*/
public List<T> getListOfInfoPerPage() {
return listOfInfoPerPage;
}
/**
* @param listOfInfoPerPage 设定每页结果信息集合,值由数据库指定
*/
public void setListOfInfoPerPage(List<T> listOfInfoPerPage) {
this.listOfInfoPerPage = listOfInfoPerPage;
}
@Override
public String toString() {
return "PagingQuery [currentPageNumber=" + currentPageNumber + ", totalPages=" + totalPages + ", piecesPerPage="
+ piecesPerPage + ", totalPieces=" + totalPieces + "]";
}
}
除了页面对象,我们还需要一个JavaBean对象,就是数据信息对象,也就是页面对象的里的信息集合的元素,每个对象(也就是每条数据)对应数据库的一条记录。
以学生信息为例,根据数据库表结构创建学生对象。
public class StudentInfo {
// 学号