Struts2+Hibernate實現(xiàn)數(shù)據(jù)分頁的方法
本文實例講述了Struts2+Hibernate實現(xiàn)數(shù)據(jù)分頁的方法。分享給大家供大家參考,具體如下:
1.用Hibernate實現(xiàn)分頁技術:
/**
* 使用hql語句進行分頁查詢
* @param hql 需要查詢的hql語句
* @param offset 第一條記錄索引
* @param pageSize 每頁需要顯示的記錄數(shù)
* @return 當前頁的所有記錄
*/
@SuppressWarnings("unchecked")
public List findByPage(final String hql,
final int offset, final int pageSize)
{
//通過一個HibernateCallback對象來執(zhí)行查詢
List list = getHibernateTemplate()
.executeFind(new HibernateCallback()
{
//實現(xiàn)HibernateCallback接口必須實現(xiàn)的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//執(zhí)行Hibernate分頁查詢
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
// 獲取總記錄數(shù)
public int getRows(String hql) {
return getHibernateTemplate().find(hql).size();
}
2.在Action里調用Hibernate實現(xiàn)分頁技術的方法,并跳轉到顯示界面:
// 分頁
@SuppressWarnings("unchecked")
public String paging() {
String hql = "from Income"; // 分頁的數(shù)據(jù)表
int pageSize = 3; // 每頁顯示記錄的條數(shù)
int allRows = service.getRows(hql); // 記錄總數(shù)
int allPage = 0; // 總頁數(shù)
int offset = getPage() + 1; // 第一條記錄的索引
/*if (rows % size != 0) {
pageSize = rows / size + 1;
} else {
pageSize = rows / size;
}*/
allPage = (allRows - 1) / pageSize + 1; // 計算總頁數(shù)
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"
class="com.xqh.action.IncomeAction">
<!-- 為兩個邏輯視圖配置視圖頁面 -->
<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 class="div1">
<table width="100%" cellpadding="0" cellspacing="0" border="0"
align="center">
<tr>
<td class="td_title1">
·當前位置:收入管理>>查看收入
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="50">
<br>
<table border="1" align="center" width="700" cellpadding="1"
cellspacing="1" bgcolor="#036500" bordercolor="#FFFFF">
<tr bgcolor="#FFFFFF">
<td class="tb_tl" align="center">
收入編號
</td>
<td class="tb_tl" align="center">
日期
</td>
<td class="tb_tl" align="center">
方式
</td>
<td class="tb_tl" align="center">
金額
</td>
<td class="tb_tl" align="center">
項目
</td>
<td class="tb_tl" align="center">
來源
</td>
<td class="tb_tl" align="center">
人員
</td>
<td class="tb_tl" align="center">
備注
</td>
<td class="tb_tl" 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.分頁結果:

本文章未提供底層數(shù)據(jù)庫中的實現(xiàn),但只要掌握分頁原理,相信這問題不大。具體分頁原理可參照前面一篇:《Hibernate框架數(shù)據(jù)分頁技術實例分析》
希望本文所述對大家基于Hibernate框架的Java程序設計有所幫助。
相關文章
packages思維及使用Java添加Android平臺特定實現(xiàn)
這篇文章主要為大家介紹了packages思維及使用Java添加Android平臺特定實現(xiàn)在Flutter框架里的體現(xiàn)和運用詳解,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Java遞歸讀取文件例子_動力節(jié)點Java學院整理
本文通過一段示例代碼給大家介紹了java遞歸讀取文件的方法,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-05-05
springBoot集成redis(jedis)的實現(xiàn)示例
Redis是我們Java開發(fā)中,使用頻次非常高的一個nosql數(shù)據(jù)庫,本文主要介紹了springBoot集成redis(jedis)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2023-09-09
Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原
這篇文章主要介紹了Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原因,本文給大家分享詳細解決方案,需要的朋友可以參考下2023-04-04
Spring擴展點之BeanFactoryPostProcessor詳解
這篇文章主要介紹了Spring擴展點之BeanFactoryPostProcessor詳解,Spring的設計非常優(yōu)雅,有很多的擴展點供我們對項目進行擴展,今天學習一下Spring其中擴展點之一的BeanFactoryPostProcessor,需要的朋友可以參考下2023-11-11

