page.java(全类代码)
package com.yongle.web.utils;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public class Page {
private int pageCount ;// 总页数
private int pageSize ;// 每页记录数
private int currentPage ;// 当前页数
private int firstRecord ; // 从第几条开始
private int recordCount ; // 总记录数
private String hql;// 查询的hql
private List<Object> params;// 查询的条件
private List list = new ArrayList();// 查询的结果
private String url;// 查询的条件
private String pageStr;// 分页的标签
public String getPageStr() {//用来生成翻页的工具条
String pageCount_="&pageCount="+pageCount;
String currentPage_="¤tPage=";
String url_=url+pageCount_+currentPage_;
StringBuffer sb=new StringBuffer();
if(pageCount<currentPage)return null;
if (currentPage==1) {
sb.append("<span class='disabled'><<首页</span> <span class='disabled'> <<上一页</span>");
} else {
sb.append("<a href='"+ url_ +"1'><<首页</a><a href='"+ url_ +(currentPage-1)+"'> <<上一页</a>");
}
if((currentPage-3)>0 ) sb.append("<a href='"+ url_ +(currentPage-3)+"'> "+(currentPage-3)+"</a>");
if((currentPage-2)>0 ) sb.append("<a href='"+ url_ +(currentPage-2)+"'> "+(currentPage-2)+"</a>");
if((currentPage-1)>0 ) sb.append("<a href='"+ url_ +(currentPage-1)+"'> "+(currentPage-1)+"</a>");
sb.append("<span class='current'> "+currentPage+"</span>");
if((pageCount-currentPage)>0 ) sb.append("<a href='"+ url_ +(currentPage+1)+"'> "+(currentPage+1)+"</a>");
if((pageCount-currentPage)>1 ) sb.append("<a href='"+ url_ +(currentPage+2)+"'> "+(currentPage+2)+"</a>");
if((pageCount-currentPage)>2 ) sb.append("<a href='"+ url_ +(currentPage+3)+"'> "+(currentPage+3)+"</a>");
if (pageCount == currentPage) {
sb.append("<span class='disabled'> 下一页>></span><span class='disabled'> 末页>></span>");
} else {
sb.append("<a href='"+ url_ +(currentPage+1)+"'> 下一页>></a><a href='"+ url_ +(pageCount)+"'> 末页>></a>");
}
//System.out.println(sb.toString());
return sb.toString();
}
public void setPageStr(String pageStr) {
this.pageStr = pageStr;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getCurrentPage() {
return(this.currentPage==0)?1:this.currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
// 当前开始位置为(当前页-1)*每页记录数
public int getFirstRecord() {
currentPage=(currentPage==0)?1:currentPage;
return (currentPage - 1) * pageSize;
}
public void setFirstRecord(int firstRecord) {
this.firstRecord = firstRecord;
}
public String getHql() {
return hql;
}
public void setHql(String hql) {
this.hql = hql;
}
public List<Object> getListQuery() {
return params;
}
public void setListQuery(List<Object> params) {
this.params = params;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getRecordCount() {
return recordCount;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
public List<Object> getParams() {
return params;
}
public void setParams(List<Object> params) {
this.params = params;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
dao实现(两个方法共同完成实现)
/**
* 分页查询(hql分页)方法代码
*/
@SuppressWarnings("unchecked")
public Page findByPage( Page page) {
int currentpage = page.getCurrentPage(); // 获得当前页
int pagesize = page.getPageSize(); // 每页的条数
int firstrecord = page.getFirstRecord(); // 从第几条开始
int recordcount = page.getRecordCount(); // 获得记录总数
int pagecount = page.getPageCount(); // 总页数
List<Object> params = page.getListQuery();// 查询的条件集合
String hql = page.getHql();
List ls = new ArrayList();// 查询结果集合
Session session = this.getSession();
//
if (currentpage == 1) {//第一页是查询总条数和计算页数
String counthql = hql.substring(hql.toLowerCase().lastIndexOf("from"));
counthql = "select count(*) " + counthql;
// 创建查询并设置查询缓存
Query query = session.createQuery(counthql).setCacheable(true);
for (int i = 0; i < params.size(); i++) {
query.setParameter(i, params.get(i), Hibernate.LOCALE);
}
// 获得记录总数
recordcount = Integer.parseInt(query.list().get(0).toString());
// 算出总共有多少页
if (recordcount % pagesize == 0) {
pagecount = recordcount / pagesize;
} else {
pagecount = recordcount / pagesize + 1;
}
}
//查询数据
ls = findByPageHelper(session,hql, params, firstrecord, pagesize);
page.setPageCount(pagecount);// 总页数
page.setRecordCount(recordcount);// 总记录数
page.setList(ls);// 结果集合
return page;
}
/**
* 分页查询辅助类
*
* @param hql
* 查询语句
* @param params
* 查询参数
* @param firstrecord
* 从第几条开始
* @param pagesize
* 取多少条
* @return 查询结果集
*/
public List<?> findByPageHelper(Session session, String hql, List<Object> params,
int firstrecord, int pagesize) {
Query query = session.createQuery(hql);
query.setCacheable(true);// 设置缓存
for (int i = 0; i < params.size(); i++) {
query.setParameter(i, params.get(i), Hibernate.LOCALE);
}
query.setFirstResult(firstrecord);
query.setMaxResults(pagesize);
List<?> list=query.list();
session.close();
return list;
}
action调用代码(struts2.0代码)price,played 均已得到
public String findOrder() {
List<Object> params = new ArrayList<Object>();
String strUrl=request.getContextPath()+"/yaohao/findOrder.action?price="+price+"&played="+played;
String queryString = " from TComm t where t.played=? and t.prices=? and t.yaohao=1 order by id desc" ;
params.add(played);
params.add(price);
page.setCurrentPage(currentPage);
page.setPageCount(pageCount);
page.setHql(queryString);
page.setPageSize(10);
page.setUrl(strUrl);
page.setListQuery(params);
page = commDAO.findByPage(page);
// System.out.println(page.getList().size());
return "getListOk";
}
页面展示代码:
<table width="912" cellpadding="0" cellspacing="0" bordercolor="#9DBFD6" class="table_css_1 line18">
<tr class="table_title_1">
<td width="97" height="25">订单号</td>
<td width="181">订单时间</td>
<td width="278">比赛名称</td>
<td width="172">比赛时间</td>
<td width="109">姓名</td>
<td width="73">数量</td>
</tr>
<c:forEach var="t" items="${page.list}">
<tr align="center">
<td>${t.id }</td>
<td><fmt:formatDate value="${t.createdate}" type="both"/></td>
<td>${t.description }</td>
<td>${t.played }</td>
<td>${t.truename }</td>
<td>${t.ticketpiece }</td>
</tr>
</c:forEach>
<tr class="table_title_1">
<td colspan="6">${page.pageStr}</td><!-- 分页工具条已经自动生成,这里只需要取出即可 -->
</tr>
</table>