最优化最灵活的Hibernate分页_hql实现
来源:互联网 发布:拍卖房地产司法数据 编辑:程序博客网 时间:2024/06/08 03:07
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>
- 最优化最灵活的Hibernate分页_hql实现
- 08_传智播客hibernate教程_hql的命名参数与Query接口的分页查询
- 最简单的JSP分页实现!
- struts2实现最简单的分页技术
- 【java】实现最简单的分页布局
- 最优化的ms sql server分页sql语句
- 最灵活的WEB打印-自定义报表
- 解析HTML最灵活的Java组件
- 最优化方法的Matlab实现
- 最优化方法的Matlab实现
- 最优化方法的Matlab实现
- 最优化方法的Matlab实现
- Hibernate学习文档_HQL
- spring与hibernate集成--关于配置文件的最优化使用
- Ext.get() 和 Ext.query() 组合使用 实现 最灵活的取元素方式
- Ext.get() 和 Ext.query() 组合使用 实现 最灵活的取元素方式
- Ext.get() 和 Ext.query() 组合使用 实现 最灵活的取元素方式
- 最优化的代码
- 海量数据处理中常见的一道面试题
- 改变自己
- 2011-03-03 LDAP
- 一个“放”字千般哲理。
- java synchronized详解
- 最优化最灵活的Hibernate分页_hql实现
- .NET简谈组件程序设计之(初识序列化、持久化)
- LinkedHashMap用法
- how to scroll a big imageView in ScrollView
- 在java中,将阿拉伯数字转换成大写
- jQeruy 里each循环中的break与continue的替代物return false;和return true;
- 黑客常用的一些cmd命令
- 内存对齐-笔记
- 让DIV浮动在FLASH之上