实现思路:
- 创建分页类,包含当前页数,总页数,每页条目数,查询结果等
- 使用session.createQuery(hql).setFirstResult()和.setMaxResults()分页
- 在工具类中创建分页对象并返回给调用者(action或servlet等)
- 前台JSP使用el表达式获取分页信息
分页类:PageMode.java
import java.util.List;
public class PageMode {
private int nowPage; //当前页数
private int pageSize; //每页条数
private int total; //总记录数
private int totalPage; //总页数
private List<Object> datas; //结果集
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List<Object> getDatas() {
return datas;
}
public void setDatas(List<Object> datas) {
this.datas = datas;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getNowPage() {
return nowPage;
}
public void setNowPage(int nowPage) {
this.nowPage = nowPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
分页工具类:PageUtil.java
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import dao.HibernateSessionFactory;
import entity.PageMode;
public class PageUtil {
@SuppressWarnings("unchecked")
public PageMode markPageMode(int nowPage,int pageSize,String entityName){
String hql = "select count(*) from " + entityName; //获取总记录数
List<Object> datas = new ArrayList<Object>();
int total = 0;
int totalPage = 0;
Session session = null;
try {
session = HibernateSessionFactory.getSession();
Long rel = (Long) session.createQuery(hql).uniqueResult();
total = rel.intValue();
datas = (ArrayList<Object>)session.createQuery("from " + entityName)
.setFirstResult((nowPage-1)*pageSize)
.setMaxResults(pageSize)
.list();
if(total%pageSize!=0){
totalPage = total / pageSize + 1;
}else{
totalPage = total / pageSize;
}
PageMode pm = new PageMode();
pm.setNowPage(nowPage);
pm.setPageSize(pageSize);
pm.setDatas(datas);
pm.setTotal(total);
pm.setTotalPage(totalPage);
return pm;
} catch (Exception e) {
e.printStackTrace();
} finally {
HibernateSessionFactory.closeSession();
}
return null;
}
}
在具体action中对分页工具类的调用
public class KnowledgeAction implements ServletRequestAware{
private HttpServletRequest request;
PageUtil util = new PageUtil();
public String showList(){
String flag = "showList_err";
int nowPage = 1;
int pageSize = 5;
try {
if(request.getParameter("nowPage") != null){
nowPage = Integer.parseInt(request.getParameter("nowPage"));
}
if(request.getParameter("pageSize")!= null){
pageSize = Integer.parseInt(request.getParameter("pageSize"));
}
PageMode pm = util.markPageMode(nowPage, pageSize, "Knowledge");
request.getSession().setAttribute("PM", pm);
flag = "showList_ok";
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
JSP页面的显示
<c:if test="${PM.nowPage>1 }">
<a href="knowledge!showList.action?nowPage=1">首页</a>|</c:if>
<c:if test="${PM.nowPage>1 }">
<a href="knowledge!showList.action?nowPage=${PM.nowPage-1 }">上一页</a>|</c:if>
<c:if test="${PM.nowPage<PM.totalPage }">
<a href="knowledge!showList.action?nowPage=${PM.nowPage+1 }">下一页</a>|</c:if>
<c:if test="${PM.totalPage>1 }">
<a href="knowledge!showList.action?nowPage=${PM.totalPage }">末页</a></c:if>
第${PM.nowPage }页/共${PM.totalPage }页(${PM.total }条记录)