当前位置: 首页 > 编程日记 > 正文

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语句得到数据库中记录总数*/@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" οnsubmit="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的配置文件就不列出来了,那些都不是重点!

页面效果如下:

相关文章:

Cmake软件编译opencv报错,CMake Warning at cmake/OpenCVDownload.cmake:193 (message): FFMPEG: Download...

当执行如下操作时&#xff1a; 出现下面报错&#xff0c; 在链接ipaddress.com查询raw.githubusercontent.com地址&#xff0c;然后将ip添加至C:\Windows\System32\drivers\etc\hosts中&#xff1a; 保存后&#xff0c;重新在cmake软件中点击“Configure”等待即可。

Blender+SP+UE5游戏艺术工作流程学习

Blender到虚幻引擎5 Blender游戏艺术 Blender for Game Art 你会学到: 如何在Blender中创建三维模型 UV如何展开和布局 如何在Substance Painter中表现肌理 如何使用虚幻引擎5 如何在UE5中点亮室内环境 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&…

JQ 全选后获取选中的值_为什么在PBI中还需要切片器之三:Excel切片器之度量值切换...

Excel切片器之度量值切换原创 海峰没想到上篇文章一经发出&#xff0c;很快就过了10个留言&#xff0c;大喜过望&#xff0c;今天立马揭晓切片器之度量切换的应用。切片器之度量切换----参数法创建参数表&#xff0c;如下并导入数据模型创建需要的度量值&#xff0c;利润合计万…

layoutSubviews总结(转)

- (void)setNeedsDisplay- (void)drawRect但是是用initWithFrame 进行初始化时&#xff0c;当rect的值不为CGRectZero时,也会触发 You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want. layoutSubviews, …

PHP日期格式转时间戳

PHP 提供了函数可以方便的将各种形式的日期转换为时间戳&#xff0c;该类函数主要是&#xff1a; strtotime()&#xff1a;将任何英文文本的日期时间描述解析为时间戳。mktime()&#xff1a;从日期取得时间戳。strtotime() strtotime() 函数用于将英文文本字符串表示的日期转换…

TFmini传感器使用

使用激光传感器 打开地面站&#xff0c;Mavlink控制台输入tfmini start --> tfmini status -->显示 current_distance:数字 即可得到距离&#xff1b; 将timini插到口UART&I2C B上面 需要在自启动文件中添加tfmini的自启动&#xff0c;否则出来的数据是0&#xff1b;…

3DsMax渲染插件VRay NEXT完整的视频指南

要求 基本的计算机和三维软件知识 这门课程对初学者和进阶者都有好处 我们确实经历了许多你甚至不知道存在的功能 VRay NEXT for 3Ds Max – Complete Video Guide 欢迎来到V-RAY视频手册 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:aac&#xff0c;44100 Hz语言…

MyEclipse中运行环境jre、编译级别、tomcat运行环境区别

运行环境JRE SYSTEM LIARARY引入项目中依赖的jdk基础包&#xff0c;在java build path --》library中可以切换 编译级别是项目编译成.class时使用的编译jdk版本&#xff0c;只能向下编译 tomcat运行环境选择jdk版本&#xff0c; 以上三个配置最好一致&#xff0c;如果不一致可以…

食堂就餐刷卡系统源码_智慧食堂重新定义你的食堂管理系统

智慧食堂有着针对于多种业态的适用行解决方案&#xff0c;可以说几乎是满足了所有团餐食堂&#xff0c;从进销存管理到财务系统再到智能硬件&#xff0c;让对食堂有着传统麻木观念的人群有了耳目一新的变化&#xff0c;下面就跟大家说几个智能硬件亮点&#xff0c;从新帮你定义…

2022-2028年全球与中国闪光棉市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了全球与中国闪光棉行业市场行业相关概述、全球与中国闪光棉行业市场行业运行环境、分析了全球与…

WebAPI初探

由于即将要接手的新项目计划用ASP.NET MVC3来开发&#xff0c;所以最近一段时间一直在看相关的书或文章。因为之前在大学里也曾学习过MVC2开发&#xff0c;也做过几个简单的MVC2的小型测试项目&#xff0c;不过在后来工作以后主要还是开发WebForm的项目&#xff0c;所以MVC的东…

ROS控制无人机offboard模式

在确保已经安装ROS以及Mavros情况下使用下列步骤 1.打开PX4源码程序&#xff0c;运行gazebo cd Firmware make px4_sitl_default gazebo2.打开Mavros roslaunch mavros px4.launch fcu_url:"udp://:14540127.0.0.1:14557"3.运行功能包程序 rosrun offboard_node o…

业余快速学习虚幻引擎教程

仅用5小时学会虚幻引擎&#xff01; 你会学到什么 专为希望在业余时间打造虚幻引擎技能的艺术家和开发人员量身定制的专业技术 从几何图形到材料&#xff0c;从照明到互动&#xff0c;所有方面的提示 探索如何创造建筑水的效果 如何使用顶点绘制交互绘制多种材质 如何将特定地…

bpython ipython_安装ipython后命令找不到ipython bpython -bash: *python: command not found

原博文 2018-10-30 21:53 − ipython bpython -bash: *python: command not found 问题&#xff1a; 当pip安装ipython, bpython后, 直接执行ipython or bpython会报错&#xff1a;*python... 相关推荐 2019-12-09 17:35 − 运行xcall.sh jps时提示&#xff0c;报错“bash: jps…

js正则表达式/replace替换变量方法

转自&#xff1a;http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法&#xff1a;/pattern/flags 先简单案例学习认识下replace能干什么: 正则表达式构造函数&#xff1a; new RegExp("pattern"[,"flags&q…

第二版地面站加入"参数列表"

1. 连接界面 2. 电子地图 3. 参数列表后续新加入功能&#xff1a;待加入…

Blender中的主程序纹理学习课程 Master Procedural Texturing in Blender

挖掘Blender不可思议的强大节点编辑器的无限潜力。 你会学到: 逐步构建高级和高度可定制的程序纹理。 将许多不同层次的细节结合成一个复杂而现实的结果。 从头开始构建高级程序纹理背后的思维过程。 使用组节点为您的材料创建超级方便的定制。 课程获取&#xff1a;Blender中…

适合win7的python版本_windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2...

windows下多个python版本共存&#xff0c;如何在Windows7系统上安装最新的64位Python3.6.2 1、官网下载python3.6.2 https://www.python.org/ftp/python/3.6.2/python-3.6.2-amd64.exe 2、安装&#xff0c;选择自定义安装&#xff0c;直接安装到D盘目录下方便查找&#xff0c;把…

day18——sql优化——绑定变量

SQL> create table t(id int);SQL> set timing onSQL> variable x number; (声明x变量)SQL> exec :x :8SQL> insert into t values(:x);SQL> select * from t;SQL> commit;SQL> declare2 i number;3 sqlstr varchar(2000);4 …

2022-2028年全球与中国人字拖市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了全球与中国人字拖行业市场行业相关概述、全球与中国人字拖行业市场行业运行环境、分析了全球与…

【翻译】Ext JS 6 Beta发布

原文&#xff1a;Ext JS 6 Beta is Now Available 概述Ext JS 6的好处新的Ext JS功能和工具需要你的反馈意见概述 很高兴&#xff0c;Ext JS 6 beta版本现在发布了。该版本是为了让你、社区来测试和评估Ext JS 6工作进度的。这是协助创建最好的Ext JS发布版本的最好方式。 对于…

PX4编写msg文件

在msg文件夹下&#xff0c;创建一个msg文件&#xff0c;然后在&#xff23;MakkeLists.txt里面声明一下&#xff0c;然后在终端打开项目文件&#xff0c;&#xff26;irmware&#xff0c;输入指令&#xff1a;make px4_fmu-v5_default&#xff0c;编译即可在/home/xx/xxx/Firmw…

UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit

持续时间13h 1920X1080 .ts 包含项目文件 大小解压后&#xff1a;4.9G 语言&#xff1a;英语中文字幕&#xff08;人工校对&#xff09; 标题:风格化的车站——环境艺术家的生存工具包 信息: 环境艺术很难。 尤其是作为初学者&#xff0c;就像你自己一样。有大量的工作流程&am…

python如何调用文件_如何调用另一个python文件中的代码

原博文 2017-07-10 15:56 − 无论我们选择用何种语言进行程序设计时&#xff0c;都不可能只有一个文件&#xff08;除了“hello world”&#xff09;&#xff0c;通常情况下&#xff0c;我们都需要在一个文件中调用另外一个文件的函数呀数据等等&#xff0c;总之要操作其他文件…

C++中模块(Dll)对外暴露接口的方式

总结下C中模块(Dll)对外暴露接口的方式&#xff1a; (1)导出API函数的方式这种方式是Windows中调用DLL接口的最基本方式&#xff0c;GDI32.dll, User32.dll都是用这种方式对外暴露系统API的。这种方式的优点是导出函数没有语言限制&#xff0c;什么语言都能调用&#xff1b;缺点…

LVS详解及基于LVS实现web服务器负载均衡

前言LVS(Linux Virtual Server)Linux虚拟服务器&#xff0c;是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立&#xff0c;是中国国内最早出现的自由软件项目之一。通过LVS提供的负载均衡技术和Linux操作系统可实现一个高性能、高可用的服务器群集&#xff0c;从…

解决Ubuntu系统下git clone下载速度较慢的问题(亲测有效)

常见问题使用Git clone下载网速通常有十几kb&#xff0c;下载较慢&#xff0e; 使用以下指令即可解决&#xff1a; //这是我们要clone的&#xff0c;通常是github.com需要替换掉&#xff0c;就是在github.com后面加上.cnpmjs.org就可以了 git clone https://github.com/Hacker…

Revit结构2021专业人士的选择:从入门到专业

Revit结构2021专业人士的选择:从入门到专业 Revit Structure 2021 : 13th Floor Concrete Building 你会学到: Revit结构中的第13栋混凝土建筑 在Revit结构中启动新项目 创建级别的基本方法 创建关卡的技巧 在Revit结构2021中处理主要和次要问题 网格的绘制 直线和曲线网格 圆…

神奇的FireFox

今天开发的时候用FireFox,然后有个js总是不出效果,window.close,然后换个浏览器就完全没问题了,还有onkeydown->ruturn false 屏蔽按键,FireFox也不行........ 果然FireFox这么好用是有原因的... 推荐大家开发的时候还是用360极速,自用还是FireFox好一点.转载于:https://www…

python输出结果空格分割_python 输出列表元素实例(以空格/逗号为分隔符)

给定list,如何以空格/逗号等符号以分隔符输出呢&#xff1f; 一般的&#xff0c;简单的for循环可以打印出list的内容&#xff1a; l[1,2,3,4] for i in l: print(i) 输出结果一行一个元素&#xff1a; 1 2 3 4 若想得到以空格或逗号为分隔符的输出结果&#xff0c;代码可改为&a…