package cn.java.beans;
import java.util.List;
public class Page<T> {
private List<T> list;
private int totalRecord; //总记录数
private int pageSize=2; //页面大小
private int totalPage; //总页数
private int startIndex; //查询开始索引
private int pageNum; //用户想看的当前页码
private int startPage; //jsp页面的起始页
private int endPage;//jsp页面的结尾页
public Page(int totalRecord_,int pageNum_){
this.totalRecord=totalRecord_;
//算出总页数
if(this.totalRecord%this.pageSize==0){
this.totalPage=this.totalRecord/this.pageSize;
}else{
this.totalPage=this.totalRecord/this.pageSize+1;
}
this.pageNum=pageNum_;
//数据库查询索引开始位置
this.startIndex=(this.pageNum-1)*this.pageSize;
//jsp页面索引每次显示10条
if(this.totalPage<10){
this.startPage=1;
this.endPage=this.totalPage;
}else{
//每次显示10页
this.startPage=this.pageNum-4;
this.endPage=this.pageNum+5;
if(this.startPage<1){
this.startPage=1;
this.endPage=10;
}
if(this.endPage>this.totalPage){
this.endPage=this.totalPage;
this.startPage=this.totalPage-9;
}
}
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
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 int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
}
page类封装页面的一些具体数据,通过构造函数中传入总记录数(一般可以用dao查询出总记录数传入)利用pageSize求出总的页码数,根据用户想看的页码数求出数据库应该从哪一条记录开始查询,利用用户想看的页码数求出前后总共应该显示的页码数。List主要用来记录从数据库查询出的具体哪一页应该显示的数据。
//查询指定用户的分页数据
@Override
public List<Article> getPageData(int startIndex, int pageSize,
String userName) {
return sessionFactory.getCurrentSession().createQuery("from Article where username=? order by date desc")
.setString(0, userName)
.setFirstResult(startIndex)
.setMaxResults(pageSize).list();
}
这是dao的查询语句,用Hibernate写的。
@Override
public Page getPageData(String pageNum,String userName) {
if(pageNum==null){
Page page=new Page(articleDao.getUserTotalCount(userName), 1);
List<Article> list=articleDao.getPageData(page.getStartIndex(), page.getPageSize(),userName);
page.setList(list);
return page;
}else{
Page page=new Page(articleDao.getUserTotalCount(userName),Integer.parseInt(pageNum));
List<Article> list=articleDao.getPageData(page.getStartIndex(), page.getPageSize(),userName);
page.setList(list);
return page;
}
具体在service层进行业务逻辑的组装。