使用hibernate和struts2實(shí)現(xiàn)分頁(yè)功能的示例
想著每天能學(xué)個(gè)新東西,今天準(zhǔn)備了這個(gè)hibernate+struts2實(shí)現(xiàn)頁(yè)面的分頁(yè)功能,以下是源代碼。
1.DAO層接口的設(shè)計(jì),定義一個(gè)PersonDAO接口,里面聲明了兩個(gè)方法:
public interface PersonDAO
{
public List<Person> queryByPage(String hql, int offset, int pageSize);
public int getAllRowCount(String hql);
}
2.DAO層接口的實(shí)現(xiàn)類(lèi)PersonDAOImpl類(lèi),將其兩個(gè)方法實(shí)現(xiàn)出來(lái):
public class PersonDAOImpl implements PersonDAO
{
/**
* 通過(guò)hql語(yǔ)句得到數(shù)據(jù)庫(kù)中記錄總數(shù)
*/
@Override
public int getAllRowCount(String hql)
{
Session session = HibernateUtil.openSession();
Transaction tx = null;
int allRows = 0;
try
{
tx = session.beginTransaction();
Query query = session.createQuery(hql);
allRows = query.list().size();
tx.commit();
}
catch (Exception e)
{
if(tx != null)
{
tx.rollback();
}
e.printStackTrace();
}
finally
{
HibernateUtil.closeSession(session);
}
return allRows;
}
/**
* 使用hibernate提供的分頁(yè)功能,得到分頁(yè)顯示的數(shù)據(jù)
*/
@SuppressWarnings("unchecked")
@Override
public List<Person> queryByPage(String hql, int offset, int pageSize)
{
Session session = HibernateUtil.openSession();
Transaction tx = null;
List<Person> list = null;
try
{
tx = session.beginTransaction();
Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize);
list = query.list();
tx.commit();
}
catch (Exception e)
{
if(tx != null)
{
tx.rollback();
}
e.printStackTrace();
}
finally
{
HibernateUtil.closeSession(session);
}
return list;
}
}
3.定義了一個(gè)PageBean(每一頁(yè)所需要的內(nèi)容都存放在這個(gè)PageBean里面),里面用來(lái)存放網(wǎng)頁(yè)每一頁(yè)顯示的內(nèi)容:
public class PageBean
{
private List<Person> list; //通過(guò)hql從數(shù)據(jù)庫(kù)分頁(yè)查詢(xún)出來(lái)的list集合
private int allRows; //總記錄數(shù)
private int totalPage; //總頁(yè)數(shù)
private int currentPage; //當(dāng)前頁(yè)
public List<Person> getList()
{
return list;
}
public void setList(List<Person> list)
{
this.list = list;
}
public int getAllRows()
{
return allRows;
}
public void setAllRows(int allRows)
{
this.allRows = allRows;
}
public int getTotalPage()
{
return totalPage;
}
public void setTotalPage(int totalPage)
{
this.totalPage = totalPage;
}
public int getCurrentPage()
{
return currentPage;
}
public void setCurrentPage(int currentPage)
{
this.currentPage = currentPage;
}
/**
* 得到總頁(yè)數(shù)
* @param pageSize 每頁(yè)記錄數(shù)
* @param allRows 總記錄數(shù)
* @return 總頁(yè)數(shù)
*/
public int getTotalPages(int pageSize, int allRows)
{
int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1;
return totalPage;
}
/**
* 得到當(dāng)前開(kāi)始記錄號(hào)
* @param pageSize 每頁(yè)記錄數(shù)
* @param currentPage 當(dāng)前頁(yè)
* @return
*/
public int getCurrentPageOffset(int pageSize, int currentPage)
{
int offset = pageSize * (currentPage - 1);
return offset;
}
/**
* 得到當(dāng)前頁(yè), 如果為0 則開(kāi)始第一頁(yè),否則為當(dāng)前頁(yè)
* @param page
* @return
*/
public int getCurPage(int page)
{
int currentPage = (page == 0)? 1: page;
return currentPage;
}
}
4.Service層接口設(shè)計(jì),定義一個(gè)PersonService接口,里面聲明了一個(gè)方法,返回一個(gè)PageBean:
public interface PersonService
{
public PageBean getPageBean(int pageSize, int page);
}
5.Service層接口實(shí)現(xiàn)類(lèi)PersonServiceImpl類(lèi),實(shí)現(xiàn)唯一的方法:
public class PersonServiceImpl implements PersonService
{
private PersonDAO personDAO = new PersonDAOImpl();
/**
* pageSize為每頁(yè)顯示的記錄數(shù)
* page為當(dāng)前顯示的網(wǎng)頁(yè)
*/
@Override
public PageBean getPageBean(int pageSize, int page)
{
PageBean pageBean = new PageBean();
String hql = "from Person";
int allRows = personDAO.getAllRowCount(hql);
int totalPage = pageBean.getTotalPages(pageSize, allRows);
int currentPage = pageBean.getCurPage(page);
int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);
List<Person> list = personDAO.queryByPage(hql, offset, pageSize);
pageBean.setList(list);
pageBean.setAllRows(allRows);
pageBean.setCurrentPage(currentPage);
pageBean.setTotalPage(totalPage);
return pageBean;
}
}
6.Action層設(shè)計(jì),定義一個(gè)PersonAction:
public class PersonAction extends ActionSupport
{
private PersonService personService = new PersonServiceImpl();
private int page;
public int getPage()
{
return page;
}
public void setPage(int page)
{
this.page = page;
}
@Override
public String execute() throws Exception
{
//表示每頁(yè)顯示5條記錄,page表示當(dāng)前網(wǎng)頁(yè)
PageBean pageBean = personService.getPageBean(5, page);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("pageBean", pageBean);
return SUCCESS;
}
}
7.輔助類(lèi)設(shè)計(jì),HibernateUtil:
public class HibernateUtil
{
private static SessionFactory sessionFactory;
static
{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
public static Session openSession()
{
Session session = sessionFactory.openSession();
return session;
}
public static void closeSession(Session session)
{
if(session != null)
{
session.close();
}
}
}
8.最后也就是分頁(yè)頁(yè)面顯示pagePerson.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'pagePerson.jsp' starting page</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">
<script type="text/javascript">
function validate()
{
var page = document.getElementsByName("page")[0].value;
if(page > <s:property value="#request.pageBean.totalPage"/>)
{
alert("你輸入的頁(yè)數(shù)大于最大頁(yè)數(shù),頁(yè)面將跳轉(zhuǎn)到首頁(yè)!");
window.document.location.href = "personAction";
return false;
}
return true;
}
</script>
</head>
<body>
<h1><font color="blue">分頁(yè)查詢(xún)</font></h1><hr>
<table border="1" align="center" bordercolor="yellow" width="50%">
<tr>
<th>序號(hào)</th>
<th>姓名</th>
<th>年齡</th>
</tr>
<s:iterator value="#request.pageBean.list" id="person">
<tr>
<th><s:property value="#person.id"/></th>
<th><s:property value="#person.name"/></th>
<th><s:property value="#person.age"/></th>
</tr>
</s:iterator>
</table>
<center>
<font size="5">共<font color="red"><s:property value="#request.pageBean.totalPage"/></font>頁(yè) </font>
<font size="5">共<font color="red"><s:property value="#request.pageBean.allRows"/></font>條記錄</font><br><br>
<s:if test="#request.pageBean.currentPage == 1">
首頁(yè) 上一頁(yè)
</s:if>
<s:else>
<a href="personAction.action">首頁(yè)</a>
<a href="personAction.action?page=<s:property value="#request.pageBean.currentPage - 1"/>">上一頁(yè)</a>
</s:else>
<s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
<a href="personAction.action?page=<s:property value="#request.pageBean.currentPage + 1"/>">下一頁(yè)</a>
<a href="personAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾頁(yè)</a>
</s:if>
<s:else>
下一頁(yè) 尾頁(yè)
</s:else>
</center><br>
<center>
<form action="personAction" onsubmit="return validate();">
<font size="4">跳轉(zhuǎn)至</font>
<input type="text" size="2" name="page">頁(yè)
<input type="submit" value="跳轉(zhuǎn)">
</form>
</center>
</body>
</html>
至此,hibernate+struts2實(shí)現(xiàn)網(wǎng)頁(yè)分頁(yè)功能代碼部分就完畢了,像hibernate與struts的配置文件就不列出來(lái)了,那些都不是重點(diǎn)!
頁(yè)面效果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java框架篇:Spring+SpringMVC+hibernate整合開(kāi)發(fā)
- Hibernate緩存詳解
- java Hibernate多對(duì)多映射詳解及實(shí)例代碼
- 淺談SpringMVC+Spring3+Hibernate4開(kāi)發(fā)環(huán)境搭建
- Java Hibernate對(duì)象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解
- Spring與Hibernate整合事務(wù)管理的理解
- Maven 搭建SpringMVC+Hibernate項(xiàng)目詳解
- Java的Hibernate框架中復(fù)合主鍵映射的創(chuàng)建和使用教程
- Java的Hibernate框架結(jié)合MySQL的入門(mén)學(xué)習(xí)教程
- 詳解Hibernate cascade級(jí)聯(lián)屬性的CascadeType的用法
相關(guān)文章
Spring Security+Spring Data Jpa如何進(jìn)行安全管理
這篇文章主要介紹了Spring Security+Spring Data Jpa如何進(jìn)行安全管理,幫助大家更好的理解和學(xué)習(xí)Spring Security框架,感興趣的朋友可以了解下2020-09-09
IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署
這篇文章主要介紹了IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署,本文圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
java調(diào)用WebService服務(wù)的四種方法總結(jié)
WebService是一種跨編程語(yǔ)言、跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù),已存在很多年了,很多接口也都是通過(guò)WebService方式來(lái)發(fā)布的,下面這篇文章主要給大家介紹了關(guān)于java調(diào)用WebService服務(wù)的四種方法,需要的朋友可以參考下2021-11-11
BMIDE環(huán)境導(dǎo)入項(xiàng)目報(bào)編碼錯(cuò)誤解決方案
這篇文章主要介紹了BMIDE環(huán)境導(dǎo)入項(xiàng)目報(bào)編碼錯(cuò)誤解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
java如何對(duì)接企業(yè)微信的實(shí)現(xiàn)步驟
本文主要介紹了java如何對(duì)接企業(yè)微信的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

