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 = ;
- 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 == )? (allRows / pageSize): (allRows / pageSize) + ;
- return totalPage;
- }
- /**
- * 得到当前开始记录号
- * @param pageSize 每页记录数
- * @param currentPage 当前页
- * @return
- */
- public int getCurrentPageOffset(int pageSize, int currentPage)
- {
- int offset = pageSize * (currentPage - );
- return offset;
- }
- /**
- * 得到当前页, 如果为0 则开始第一页,否则为当前页
- * @param page
- * @return
- */
- public int getCurPage(int page)
- {
- int currentPage = (page == )? : 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(, 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="">
- <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")[].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="" 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="">共<font color="red"><s:property value="#request.pageBean.totalPage"/></font>页 </font>
- <font size="">共<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 - "/>">上一页</a>
- </s:else>
- <s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
- <a href="personAction.action?page=<s:property value="#request.pageBean.currentPage + "/>">下一页</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="">跳转至</font>
- <input type="text" size="" name="page">页
- <input type="submit" value="跳转">
- </form>
- </center>
- </body>
- </html>
至此,hibernate+struts2实现网页分页功能代码部分就完毕了,像hibernate与struts的配置文件就不列出来了,那些都不是重点!
页面效果如下:
hibernate和struts2实现分页功能的更多相关文章
- Strut2与Hibernate的一个web分页功能
代码没有进行过多的封装,可能看起来有点action代码部分,hibernate在这里只起到了一个查询记录集的作用. import java.util.ArrayList; import java.ut ...
- hibernate和struts实现分页
仓促把功能进行实现一下 类与类之间也没有进行MVC式分开 重要的是逻辑 记录一下 希望其中的些许代码逻辑对你有用 TUserDaoImpl---dao层的实现 package com.pers.h ...
- 最新版ssh hibernate spring struts2环境搭建
最新版ssh hibernate spring struts2环境搭建 最新版spring Framework下载地址:spring4.0.0RELEASE环境搭建 http://repo.sprin ...
- 总结Spring、Hibernate、Struts2官网下载jar文件
一直以来只知道搭SSH需要jar文件,作为学习的目的,最好的做法是自己亲自动手去官网下.不过官网都是英文,没耐心一般很难找到下载入口,更何 况版本的变化也导致不同版本jar文件有些不一样,让新手很容易 ...
- 基于SSM框架的简易的分页功能——包含maven项目的搭建
新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ...
- SSH, 整合分页功能,连带DAO经典封装
任何一个封装讲究的是,使用,多状态.Action: 任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...
- 带分页功能的SSH整合,DAO层经典封装
任何一个封装讲究的是,使用,多状态.Action: 任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...
- 解决hibernate对Sql Server分页慢的问题
一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...
- 简单封装分页功能pageView.js
分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...
随机推荐
- 常用的Linux操作一
Linux 常用的操作必须明白. 1.ls 和ll 列出文件的目录. 2.tail -f XXX 查看文件. 3.chmod -R 777 XXX.jar 赋予权限 4.cat 查看文件 -n 对 ...
- Android 网络技术HTTP
1.XML3种解析方式(DOM.SAX.PULL) 在网络上传输数据时最常用的格式有两种,XML 和JSON 这里首先明白什么是SAX是一个用于处理XML事件驱动的"推"模型,优点 ...
- iOS中sqlite3操作
声明:下面命令我没有所有使用过, 仅用于收藏, 欢迎大家指出当中的错误 'SELECT count(*) FROM sqlite_master WHERE type="table&qu ...
- Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历
1. Collection集合存储学生对象并遍历: 需求:存储自定义对象并遍历Student(name,age) 分析: (1)创建学生类 (2)创建集合对象 (3)创建学生对象 (4)把学生对象添加 ...
- MediaCodec文档翻译
MediaCodec|文档翻译 classoverView mediacodec类可以用来调用系统底层的编码/解码软件. mediacodec一般是这么用的: MediaCodec codec = M ...
- 【开源java游戏框架libgdx专题】-15-系统控件-Button类
Button类继承与Actor类,可以在舞台中使用,但是它也继承了许多Actor的子类,如Group.Table.WidgetGroup灯. 常用构造方法: Button():创建按钮对象,不设置其样 ...
- webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)
1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...
- 2015-09-21CSS:引入方式、选择器、注释、文字样式
1.HTML中引入CSS的方式 HTML中引入CSS的样式有4种:行内式.内嵌式.导入式和链接式. ⑴行内式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用 ...
- LINQ:使用Take和Skip实现分页
随便找的,还没有试过代码. class Program { static int Main() { //每页大小 ; //页码 ; //源数据 string[] names = { "贤静& ...
- 三、T4模板与实体生成
上文我们最后虽然用模板创建了一个实体类,但是类的内容仍旧是静态的,这里我们需要用动态方式生成类的内容.因为需要查询数据库这里又免不了各种繁琐的连接数据库操作,为了使我们的编码更加直观,仍然采 ...