国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

使用hibernate和struts2實(shí)現(xiàn)分頁功能的示例

2019-11-26 13:19:19
字體:
供稿:網(wǎng)友

想著每天能學(xué)個(gè)新東西,今天準(zhǔn)備了這個(gè)hibernate+struts2實(shí)現(xiàn)頁面的分頁功能,以下是源代碼。

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)類PersonDAOImpl類,將其兩個(gè)方法實(shí)現(xiàn)出來:

public class PersonDAOImpl implements PersonDAO{  /**   * 通過hql語句得到數(shù)據(jù)庫中記錄總數(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提供的分頁功能,得到分頁顯示的數(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(每一頁所需要的內(nèi)容都存放在這個(gè)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ì),定義一個(gè)PersonService接口,里面聲明了一個(gè)方法,返回一個(gè)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)頁   */  @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  {    //表示每頁顯示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)!

頁面效果如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 丰原市| 沽源县| 克东县| 抚宁县| 苏尼特右旗| 漾濞| 石城县| 沭阳县| 承德市| 金堂县| 亚东县| 云阳县| 衡南县| 获嘉县| 临猗县| 涿州市| 霍林郭勒市| 宁化县| 铁岭市| 运城市| 宁晋县| 古丈县| 乳源| 城口县| 礼泉县| 西安市| 苏尼特右旗| 无为县| 湖北省| 通山县| 遵义县| 若羌县| 达拉特旗| 定结县| 林口县| 闽清县| 公主岭市| 龙州县| 竹北市| 岑溪市|