时间:2016-12-11 01:41
1、分页的优点:
只查询一页,不需要查询所有数据,能够提高效率。
2、分页数据
页面的数据都是由Servlet传递的
* 当前页:pageCode
> 如果页面没有向Servlet传递页码,那么Servlet默认为第一页,否则按照传递页码为准。
* 总页数:totalPages
> 总记录数 / 每页记录数
* 总记录数:totalRecord
> Dao来获取,select count(*) from customer
* 每页记录数:称为业务数据或系统数据。
* 当前页数据:beanList
* URL
3、数据的传递
这些分页数据总要在各层之间来回传递,可以把这些分页数据封装到一个JavaBean中,它就叫分页Bean,例如:PageBean。
import java.util.List;
public class PageBean {
// 当前页码pageCode
private int pageCode;
/*
* 总页数
* 通过计算得出,不允许外界设置值
* 因为只能get,所以不需要成员变量,通过计算即可得出
*/
// private int totalPages;
// 总记录数
private int totalRecord;
// 每页记录数
private int pageSize;
// 当前页的记录
private List beanList;
public int getPageCode() {
return pageCode;
}
public void setPageCode(int pageCode) {
this.pageCode = pageCode;
}
public int getTotalPages() {
/*
* 计算总页数
* 通过总记录数和每页记录数来计算总页数,当存在余数时,总页数 + 1
*/
int totalPages = totalRecord / pageSize;
return totalRecord % pageSize == 0 ? totalPages : totalPages + 1;
}
// public void setTotalPages(int totalPages) {
// this.totalPages = totalPages;
// }
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public List getBeanList() {
return beanList;
}
public void setBeanList(List beanList) {
this.beanList = beanList;
}
@Override
public String toString() {
return "PageBean [pageCode=" + pageCode + ", totalPages=" + ", totalRecord=" + totalRecord + ", pageSize=" + pageSize + ", beanList=" + beanList + "]";
}
public PageBean(int pageCode, int totalRecord, int pageSize, List beanList) {
super();
this.pageCode = pageCode;
this.totalRecord = totalRecord;
this.pageSize = pageSize;
this.beanList = beanList;
}
public PageBean() {
super();
}
}
4、分页在各层中的处理
* 页面:给出分页相关的链接。
> 页面需要给Servlet传递当前页码。
* Servlet:创建PageBean对象, 给PageBean对象所有的属性赋值,然后传递给页面。
> 给Dao传递当前页码和每页记录数。
* Service:略
* Dao
> 负责获取:totalRecord,select count(*) from customer
> 负责获取:BeanList,select * from customer limit x, y,从x行开始,查询y行。
> limit计算公式:(当前页-1) * 每页记录数,得出的就是起始行
5、显示分页页码列表
1 2 3 4 5 6 7 8 9 10
* 最多显示多少个页码?
> 暂定10个
* 当前页在页码列表中的位置?
> 暂定为6
只需要pageCode就可以完成页码列表,需要使用pageCode来推算出起始页码(begin)和结束页码(end)
计算公式:
* 如果总页数 <= 10(列表长度),那么begin = 1,end = 总页数
* 如果总页数 > 10,使用公式计算
> begin = pageCode - 5
> end = pageCode + 4
> begin溢出:当begin小于1时,让begin = 1
> end溢出:当end > totalPages时,让end = totalPages
6、在超链接中保留请求参数
当使用多条件查询时,如果点击其它超链接,会丢失原超链接中的参数,也就是丢失请求条件,所以需要在页面的所有超链接中都要保留参数。
可以把?后的全部参数用一个字符串保存到PageBean的URL属性中,这个任务交给Servlet。
然后在页面中使用${pageBean.url }来设置超链接。
——项目代码
===============================================================================
com.wyc.cstm.dao.CustomerDao
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.wyc.cstm.domain.Customer;
import com.wyc.cstm.domain.PageBean;
import com.wyc.jdbc.TxQueryRunner;
/**
* 持久层 通过QueryRunner来操作数据库
*
* @author 31067
*
*/
public class CustomerDao {
private QueryRunner qr = new TxQueryRunner();
// /*
// * 查询全部客户信息
// */
// public List findAll() {