想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,在这里,首先要感谢

http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html

这位博友发表的博文,通过对他代码的阅读,从而自己实现了网页分页功能,以下是源代码,如大家有需要,可以回复我,我会放出源代码供大家下载!

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语句得到数据库中记录总数*/@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提供的分页功能,得到分页显示的数据*/@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(每一页所需要的内容都存放在这个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为当前显示的网页*/@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层设计,定义一个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表示当前网页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的配置文件就不列出来了,那些都不是重点!

页面效果如下:

使用hibernate和struts2实现分页功能相关推荐

  1. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO {public List<Person> queryBy ...

  2. Strut2与Hibernate的一个web分页功能

    代码没有进行过多的封装,可能看起来有点action代码部分,hibernate在这里只起到了一个查询记录集的作用. import java.util.ArrayList; import java.ut ...

  3. (详细)Hibernate查询技术(Query、Session、Criteria),Hibernate的三种状态,Hibernate集合struts2实现登录功能(二)

    一.Hibernate的三种查询方式(掌握) Hibernate中提供了三种查询方式: 1)Session的查询:按主键查询查询,方法为get或load 2)Query的查询:使用HQL语句或SQL语 ...

  4. Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    http://blog.csdn.net/myloon/archive/2007/11/08/1873652.aspx-----多谢这么好的文章 Hibernate+Spring+Struts2+Ex ...

  5. hibernate和struts实现分页

    仓促把功能进行实现一下  类与类之间也没有进行MVC式分开  重要的是逻辑 记录一下 希望其中的些许代码逻辑对你有用 TUserDaoImpl---dao层的实现 package com.pers.h ...

  6. jsp自定义图文新闻列表标签结合ssh2,带分页功能

    jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步) 1.service层 (模拟返回数据) package com.mingda.service.impl;import ...

  7. 带分页功能的SSH整合,DAO层经典封装

    任何一个封装讲究的是,使用,多状态. Action: 任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然后在继 ...

  8. java web几百万分页_举例详解用Java实现web分页功能的方法

    举例详解用Java实现web分页功能的方法 发布于 2020-11-25| 复制链接 摘记: 分页问题是一个非常普遍的问题,开发者几乎都会遇到,这里不讨论具体如何分页,说明一下Web方式下分页的原理. ...

  9. (首页上一页下一页尾页 + 下拉框跳转)分页功能

    说在前头(本人用的是bootstrap +jQuery 和 struts2 +  MVC)不影响分页功能 制作一个分页功能: 效果如下: 由上图可知,此功能只适合页数不是特别多的情况下,页数多的时候, ...

最新文章

  1. Task01——零基础入门NLP - 新闻文本分类之赛题理解
  2. 【放置奇兵】算法 小恶魔大冒险
  3. CodeForces 567F DP Mausoleum
  4. 安卓开发中SpannableString之富文本显示效果
  5. 实例62:python
  6. mysql group by_MySQL优化GROUP BY方案
  7. zebra 的Thread机制 -- 003
  8. 20200720 PLECS培训教程笔记
  9. 樊登读书会用事实说话读后感_用事实说话樊登读书笔记
  10. OWASP A6 Vulnerable and Outdated Components (自带缺陷和过时的组件)
  11. 计算机配置中什么表示硬盘,硬盘驱动器指示灯一直亮着,教您如果计算机硬盘驱动器指示灯一直亮着怎么办...
  12. 构成计算机系统物理实体的是什么,什么构成计算机的物理实体
  13. 深剖VR,AR和MR三者之间关系
  14. Android 注入 看雪
  15. 头条系 巨量算数 _signature
  16. 企业WiFi解决方案,解决所有后顾之忧
  17. 广西大学“中国东信杯”第三届程序设计竞赛-新生组-部分题解
  18. 通讯录(初级)程序编写(C语言版)
  19. 【Axure教程】中继器表格寻找和标记数据
  20. 便携一体机设计资料机构图:定制化仪器户外便携式手提触摸一体机

热门文章

  1. 操作系统原理第六章:进程同步
  2. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread -> Activity、主线程阶段 二 )
  3. 【设计模式】策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  4. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★
  5. 【Android 异步操作】线程池 ( 线程池作用 | 线程池种类 | 线程池工作机制 | 线程池任务调度源码解析 )
  6. 【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
  7. linux解压war包
  8. 慢吞吞的pip切换源
  9. Oracle case when的用法
  10. 67. Add Binary