使用hibernate和struts2实现分页功能
想著每天能學(xué)個新東西,今天準(zhǔn)備了這個hibernate+struts2實(shí)現(xiàn)頁面的分頁功能,在這里,首先要感謝
http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html
這位博友發(fā)表的博文,通過對他代碼的閱讀,從而自己實(shí)現(xiàn)了網(wǎng)頁分頁功能,以下是源代碼,如大家有需要,可以回復(fù)我,我會放出源代碼供大家下載!
1.DAO層接口的設(shè)計(jì),定義一個PersonDAO接口,里面聲明了兩個方法:
public interface PersonDAO {public List<Person> queryByPage(String hql, int offset, int pageSize);public int getAllRowCount(String hql); }2.DAO層接口的實(shí)現(xiàn)類PersonDAOImpl類,將其兩個方法實(shí)現(xiàn)出來:
public class PersonDAOImpl implements PersonDAO {/*** 通過hql語句得到數(shù)據(jù)庫中記錄總數(shù)*/@Overridepublic 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提供的分頁功能,得到分頁顯示的數(shù)據(jù)*/@SuppressWarnings("unchecked")@Overridepublic 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.定義了一個PageBean(每一頁所需要的內(nèi)容都存放在這個PageBean里面),里面用來存放網(wǎng)頁每一頁顯示的內(nèi)容:
public class PageBean {private List<Person> list; //通過hql從數(shù)據(jù)庫分頁查詢出來的list集合private int allRows; //總記錄數(shù)private int totalPage; //總頁數(shù)private int currentPage; //當(dāng)前頁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;}/*** 得到總頁數(shù)* @param pageSize 每頁記錄數(shù)* @param allRows 總記錄數(shù)* @return 總頁數(shù)*/public int getTotalPages(int pageSize, int allRows){int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1;return totalPage;}/*** 得到當(dāng)前開始記錄號* @param pageSize 每頁記錄數(shù)* @param currentPage 當(dāng)前頁* @return*/public int getCurrentPageOffset(int pageSize, int currentPage){int offset = pageSize * (currentPage - 1);return offset;}/*** 得到當(dāng)前頁, 如果為0 則開始第一頁,否則為當(dāng)前頁* @param page* @return*/public int getCurPage(int page){int currentPage = (page == 0)? 1: page;return currentPage;}}4.Service層接口設(shè)計(jì),定義一個PersonService接口,里面聲明了一個方法,返回一個PageBean:
public interface PersonService {public PageBean getPageBean(int pageSize, int page); }5.Service層接口實(shí)現(xiàn)類PersonServiceImpl類,實(shí)現(xiàn)唯一的方法:
public class PersonServiceImpl implements PersonService {private PersonDAO personDAO = new PersonDAOImpl();/*** pageSize為每頁顯示的記錄數(shù)* page為當(dāng)前顯示的網(wǎng)頁*/@Overridepublic 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ì),定義一個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;}@Overridepublic String execute() throws Exception{//表示每頁顯示5條記錄,page表示當(dāng)前網(wǎng)頁PageBean pageBean = personService.getPageBean(5, page);HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("pageBean", pageBean);return SUCCESS;} }7.輔助類設(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.最后也就是分頁頁面顯示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("你輸入的頁數(shù)大于最大頁數(shù),頁面將跳轉(zhuǎn)到首頁!");window.document.location.href = "personAction";return false;}return true;}</script></head><body><h1><font color="blue">分頁查詢</font></h1><hr><table border="1" align="center" bordercolor="yellow" width="50%"><tr><th>序號</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>頁 </font> <font size="5">共<font color="red"><s:property value="#request.pageBean.allRows"/></font>條記錄</font><br><br><s:if test="#request.pageBean.currentPage == 1">首頁 上一頁</s:if><s:else><a href="personAction.action">首頁</a> <a href="personAction.action?page=<s:property value="#request.pageBean.currentPage - 1"/>">上一頁</a></s:else><s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage"><a href="personAction.action?page=<s:property value="#request.pageBean.currentPage + 1"/>">下一頁</a> <a href="personAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾頁</a></s:if><s:else>下一頁 尾頁</s:else></center><br><center><form action="personAction" onsubmit="return validate();"><font size="4">跳轉(zhuǎn)至</font><input type="text" size="2" name="page">頁<input type="submit" value="跳轉(zhuǎn)"></form></center></body> </html>至此,hibernate+struts2實(shí)現(xiàn)網(wǎng)頁分頁功能代碼部分就完畢了,像hibernate與struts的配置文件就不列出來了,那些都不是重點(diǎn)!
頁面效果如下:
總結(jié)
以上是生活随笔為你收集整理的使用hibernate和struts2实现分页功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP与servlet之间的传值方式
- 下一篇: Struts2+Hibernate分页显