本文實例講述了Struts2+Hibernate實現數據分頁的方法。分享給大家供大家參考,具體如下:
1.用Hibernate實現分頁技術:
/*** 使用hql語句進行分頁查詢* @param hql 需要查詢的hql語句* @param offset 第一條記錄索引* @param pageSize 每頁需要顯示的記錄數* @return 當前頁的所有記錄*/@SuppressWarnings("unchecked")public List findByPage(final String hql,final int offset, final int pageSize){ //通過一個HibernateCallback對象來執行查詢List list = getHibernateTemplate() .executeFind(new HibernateCallback() { //實現HibernateCallback接口必須實現的方法public Object doInHibernate(Session session) throws HibernateException, SQLException { //執行Hibernate分頁查詢List result = session.createQuery(hql) .setFirstResult(offset) .setMaxResults(pageSize) .list(); return result; } }); return list;}// 獲取總記錄數public int getRows(String hql) { return getHibernateTemplate().find(hql).size();}2.在Action裡調用Hibernate實現分頁技術的方法,並跳轉到顯示界面:
// 分頁@SuppressWarnings("unchecked")public String paging() { String hql = "from Income"; // 分頁的數據表int pageSize = 3; // 每頁顯示記錄的條數int allRows = service.getRows(hql); // 記錄總數int allPage = 0; // 總頁數int offset = getPage() + 1; // 第一條記錄的索引/*if (rows % size != 0) { pageSize = rows / size + 1; } else { pageSize = rows / size; }*/ allPage = (allRows - 1) / pageSize + 1; // 計算總頁數List<Income> income = service.findByPage(hql, (offset-1)*pageSize, pageSize); request.setAttribute("allPage", allPage); request.setAttribute("offset", offset); request.setAttribute("income", income); return "paging";}3.struts.xml配置:
<action name="income" > <!-- 為兩個邏輯視圖配置視圖頁面--> <result name="error">/error.jsp</result> <result name="paging">/income/income_list.jsp</result> <result name="update">/income/income_edit.jsp</result></action>
4.顯示界面income_list.jsp
<%@ page language="java" pageEncoding="GBK"%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><head> <title>收入列表</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="../images/styles.css"></head><body> <div> <table cellpadding="0" cellspacing="0" align="center"> <tr> <td> ・當前位置:收入管理>>查看收入</td> </tr> <tr> <td bgcolor="#FFFFFF"> <br> <table align="center" cellpadding="1" cellspacing="1" bgcolor="#036500" bordercolor="#FFFFF"> <tr bgcolor="#FFFFFF"> <td align="center"> 收入編號</td> <td align="center"> 日期</td> <td align="center"> 方式</td> <td align="center"> 金額</td> <td align="center"> 項目</td> <td align="center"> 來源</td> <td align="center"> 人員</td> <td align="center"> 備註</td> <td align="center"> 操作</td> </tr> <s:iterator value="#request.income"> <tr bgcolor="#FFFFFF"> <td align="center"><s:property value="id"/></td> <td align="center"><s:date name="date" format="yyyy-MM-dd"/></td> <td align="center"><s:property value="style"/></td> <td align="center"><s:property value="money"/></td> <td align="center"><s:property value="project"/></td> <td align="center"><s:property value="source"/></td> <td align="center"><s:property value="personnel"/></td> <td align="center"><s:property value="remarks"/></td> <td align="center"> <a href="javascript:if(confirm('確定要刪除${id}嗎?'))location='income!del?id=${id}'">刪除</a> <a href="javascript:if(confirm('確定要修改${id}嗎?'))location='income!updateTo?id=${id}'">修改</a> </td> </tr> </s:iterator> </table> <center> 總共有${allPage}頁, 當前是第${offset}頁<a href="income!paging?page=0"><font size="2" color="blue">首頁</font></a> <a href="javascript:if(${offset}>1)location='income!paging?page=${page-1}'"><font size="2" color="red">上一頁</font></a> <a href="javascript:if(${offset}<${allPage})location='income!paging?page=${page+1}'"><font size="2" color="red">下一頁</font></a> <a href="income!paging?page=${allPage-1}"><font size="2" color="blue">末頁</font></a> </center> </td> </tr> </table> </div></body>5.分頁結果:
本文章未提供底層數據庫中的實現,但只要掌握分頁原理,相信這問題不大。具體分頁原理可參照前面一篇:《Hibernate框架數據分頁技術實例分析》
希望本文所述對大家基於Hibernate框架的Java程序設計有所幫助。