全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用hibernate和struts2实现分页功能的示例

想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,以下是源代码。

1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法:

public interface PersonDAO
{
  public List<Person> queryByPage(String hql, int offset, int pageSize);
  
  public int getAllRowCount(String hql);
}

2.DAO层接口的实现类PersonDAOImpl类,将其两个方法实现出来:

public class PersonDAOImpl implements PersonDAO
{
  /**
   * 通过hql语句得到数据库中记录总数
   */
  @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提供的分页功能,得到分页显示的数据
   */
  @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.定义了一个PageBean(每一页所需要的内容都存放在这个PageBean里面),里面用来存放网页每一页显示的内容:

public class PageBean
{
  private List<Person> list; //通过hql从数据库分页查询出来的list集合
  
  private int allRows; //总记录数
  
  private int totalPage; //总页数
  
  private int currentPage; //当前页

  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;
  }
  
  /**
   * 得到总页数
   * @param pageSize 每页记录数
   * @param allRows 总记录数
   * @return 总页数
   */
  public int getTotalPages(int pageSize, int allRows)
  {
    int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1;
    
    return totalPage;
  }
  
  /**
   * 得到当前开始记录号
   * @param pageSize 每页记录数
   * @param currentPage 当前页
   * @return
   */
  public int getCurrentPageOffset(int pageSize, int currentPage)
  {
    int offset = pageSize * (currentPage - 1);
    
    return offset;
  }
  
  /**
   * 得到当前页, 如果为0 则开始第一页,否则为当前页
   * @param page
   * @return
   */
  public int getCurPage(int page)
  {
    int currentPage = (page == 0)? 1: page;
    
    return currentPage;
  }
  
}

4.Service层接口设计,定义一个PersonService接口,里面声明了一个方法,返回一个PageBean:

public interface PersonService
{
  public PageBean getPageBean(int pageSize, int page);
}

5.Service层接口实现类PersonServiceImpl类,实现唯一的方法:

public class PersonServiceImpl implements PersonService
{
  private PersonDAO personDAO = new PersonDAOImpl();
  
  /**
   * pageSize为每页显示的记录数
   * page为当前显示的网页
   */
  @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层设计,定义一个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表示当前网页
    PageBean pageBean = personService.getPageBean(5, page);
    
    HttpServletRequest request = ServletActionContext.getRequest();
    
    request.setAttribute("pageBean", pageBean);
    
    return SUCCESS;
  }
}

7.辅助类设计,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("你输入的页数大于最大页数,页面将跳转到首页!");
        
        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>&nbsp;&nbsp;
    <font size="5">共<font color="red"><s:property value="#request.pageBean.allRows"/></font>条记录</font><br><br>
    
    <s:if test="#request.pageBean.currentPage == 1">
      首页&nbsp;&nbsp;&nbsp;上一页
    </s:if>
    
    <s:else>
      <a href="personAction.action">首页</a>
      &nbsp;&nbsp;&nbsp;
      <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>
      &nbsp;&nbsp;&nbsp;
      <a href="personAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾页</a>
    </s:if>
    
    <s:else>
      下一页&nbsp;&nbsp;&nbsp;尾页
    </s:else>
  
  </center><br>
  
  <center>
    
    <form action="personAction" onsubmit="return validate();">
      <font size="4">跳转至</font>
      <input type="text" size="2" name="page">页
      <input type="submit" value="跳转">
    </form>
    
  </center>
  
 </body>
</html>

至此,hibernate+struts2实现网页分页功能代码部分就完毕了,像hibernate与struts的配置文件就不列出来了,那些都不是重点!

页面效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# struts2实现分页  # hibernate实现分页  # struts2  # hibernate分页  # Java框架篇:Spring+SpringMVC+hibernate整合开发  # Hibernate缓存详解  # java Hibernate多对多映射详解及实例代码  # 浅谈SpringMVC+Spring3+Hibernate4开发环境搭建  # Java Hibernate对象(瞬时态  # 持久态  # 脱管态)详解  # Spring与Hibernate整合事务管理的理解  # Maven 搭建SpringMVC+Hibernate项目详解  # Java的Hibernate框架中复合主键映射的创建和使用教程  # Java的Hibernate框架结合MySQL的入门学习教程  # 详解Hibernate cascade级联属性的CascadeType的用法  # 分页  # 每页  # 首页  # 下一页  # 上一页  # 当前页  # 尾页  # 跳转  # 来了  # 在这个  # 就不  # 将其  # 所需要  # 第一页  # 则为  # 数据库中  # 配置文件  # 源代码  # 大家多多  # 跳转到 


相关文章: 网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  宁波免费建站如何选择可靠模板与平台?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  详解jQuery中基本的动画方法  如何续费美橙建站之星域名及服务?  如何用PHP快速搭建CMS系统?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站之星图片链接生成指南:自助建站与智能设计教程  如何快速生成橙子建站落地页链接?  平台云上自主建站:模板化设计与智能工具打造高效网站  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  实例解析Array和String方法  ,网页ppt怎么弄成自己的ppt?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站上市公司网站建设方案与SEO优化服务定制指南  建站之星后台管理系统如何操作?  名字制作网站免费,所有小说网站的名字?  建站10G流量真的够用吗?如何应对访问高峰?  建站168自助建站系统:快速模板定制与SEO优化指南  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  如何获取免费开源的自助建站系统源码?  如何快速辨别茅台真假?关键步骤解析  如何通过虚拟机搭建网站?详细步骤解析  如何快速重置建站主机并恢复默认配置?  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星展会模板:智能建站与自助搭建高效解决方案  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何通过智能用户系统一键生成高效建站方案?  如何通过VPS建站无需域名直接访问?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何正确选择百度移动适配建站域名?  如何在Windows环境下新建FTP站点并设置权限?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  C#如何序列化对象为XML XmlSerializer用法  PHP 500报错的快速解决方法  香港服务器如何优化才能显著提升网站加载速度?  ,南京靠谱的征婚网站?  如何在云主机上快速搭建多站点网站?  如何在VPS电脑上快速搭建网站?  html制作网站的步骤有哪些,iapp如何添加网页?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  Swift中循环语句中的转移语句 break 和 continue  电商网站制作价格怎么算,网上拍卖流程以及规则?  Python文件管理规范_工程实践说明【指导】  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站org新手必看:2024最新搭建流程与模板选择技巧 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。