使用Hibernate+Struts2+Spring实现分页查询示例
4星 · 超过85%的资源 需积分: 9 89 浏览量
更新于2024-07-26
1
收藏 62KB DOC 举报
"本示例展示了如何在Java Web开发中,结合Hibernate、Struts2和Spring框架实现分页功能。"
在Java Web开发中,经常需要处理大量的数据,并且为了提高用户体验,通常会采用分页的方式来展示这些数据。在这个实例中,我们将探讨如何使用Hibernate作为持久层框架,Struts2作为控制层框架,以及Spring作为服务层框架来协同实现分页功能。
首先,我们定义了一个名为`PageResultSet`的类,它包含了分页数据的核心信息。这个类存储了当前页的数据列表(`list`)和关于分页的附加信息(`pageInfo`)。`PageResultSet`的泛型参数`<T>`代表返回的数据类型,可以是任何对象。`getList()`和`setList()`用于获取和设置当前页的数据,而`getPageInfo()`和`setPageInfo()`则是获取和设置分页信息。
接着,我们来看`PageInfo`类,它包含了与分页相关的统计信息。`totalRow`表示总记录数,`totalPage`表示总页数,`currentPage`表示当前页码,默认值为1。`pageSize`定义了每页显示的记录数量,这里设为20。`hasPrevious`、`hasNext`、`bof`( Beginning Of File,即是否在第一页)和`eof`(End Of File,即是否在最后一页)四个布尔属性,用于判断前后页及边界情况。`PageInfo`类通过构造方法初始化,接收总记录数和每页大小作为参数。
在实际应用中,我们通常会在Service层(使用Spring管理)中编写处理数据库查询并实现分页逻辑的方法,例如:
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public PageResultSet<User> getUsersByPage(int currentPage, int pageSize) {
// 查询总记录数
int totalRow = userRepository.count();
// 计算总页数
int totalPages = (int) Math.ceil((double) totalRow / pageSize);
// 获取当前页数据
List<User> userList = userRepository.findByPage(currentPage, pageSize);
PageInfo pageInfo = new PageInfo(totalRow, totalPages, currentPage, pageSize);
// 设置是否有前一页和后一页
pageInfo.setHasPrevious(currentPage > 1);
pageInfo.setHasNext(currentPage < totalPages);
// 设置边界标志
pageInfo.setBof(currentPage == 1);
pageInfo.setEof(currentPage == totalPages);
return new PageResultSet<>(userList, pageInfo);
}
}
```
然后,在Struts2的Action中调用Service方法,并将结果传递给前端视图。视图(如JSP)可以利用这些信息展示分页导航。
```java
public class UserAction extends ActionSupport {
@Autowired
private UserService userService;
private PageResultSet<User> userPageResultSet;
public String execute() {
int currentPage = ...; // 获取请求中的当前页码
int pageSize = ...; // 获取请求中的每页大小
userPageResultSet = userService.getUsersByPage(currentPage, pageSize);
return "success";
}
// getter and setter for userPageResultSet
...
}
```
最后,在JSP中,我们可以使用Struts2的标签库来遍历`PageResultSet`中的数据,并根据`PageInfo`来生成分页链接。
```jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
...
<table>
<s:iterator value="userPageResultSet.list">
<!-- Display each user's data -->
</s:iterator>
</table>
<!-- Pagination links -->
<s:url action="users.action" var="usersUrl" />
<ul class="pagination">
<li><s:a href="%{usersUrl}¤tPage=1">First</s:a></li>
<s:if test="userPageResultSet.pageInfo.hasPrevious">
<li><s:a href="%{usersUrl}¤tPage=${userPageResultSet.pageInfo.currentPage - 1}">Prev</s:a></li>
</s:if>
<s:iterator begin="1" end="%{userPageResultSet.pageInfo.totalPage}" var="pageNumber">
<li><s:a href="%{usersUrl}¤tPage=%{pageNumber}">${pageNumber}</s:a></li>
</s:iterator>
<s:if test="userPageResultSet.pageInfo.hasNext">
<li><s:a href="%{usersUrl}¤tPage=${userPageResultSet.pageInfo.currentPage + 1}">Next</s:a></li>
</s:if>
<li><s:a href="%{usersUrl}¤tPage=%{userPageResultSet.pageInfo.totalPage}">Last</s:a></li>
</ul>
```
这样,我们就完成了基于Hibernate、Struts2和Spring的分页功能实现。这个实例展示了如何在Java Web开发中,通过整合这三个框架,有效地管理和展示大量数据,提高用户界面的交互性和性能。
2011-05-27 上传
2008-10-18 上传
2024-02-02 上传
2023-04-30 上传
2023-07-31 上传
2023-06-06 上传
2023-08-20 上传
2023-05-18 上传
2023-04-30 上传
晴天_设计师
- 粉丝: 3
- 资源: 27
最新资源
- 新型智能电加热器:触摸感应与自动温控技术
- 社区物流信息管理系统的毕业设计实现
- VB门诊管理系统设计与实现(附论文与源代码)
- 剪叉式高空作业平台稳定性研究与创新设计
- DAMA CDGA考试必备:真题模拟及章节重点解析
- TaskExplorer:全新升级的系统监控与任务管理工具
- 新型碎纸机进纸间隙调整技术解析
- 有腿移动机器人动作教学与技术存储介质的研究
- 基于遗传算法优化的RBF神经网络分析工具
- Visual Basic入门教程完整版PDF下载
- 海洋岸滩保洁与垃圾清运服务招标文件公示
- 触摸屏测量仪器与粘度测定方法
- PSO多目标优化问题求解代码详解
- 有机硅组合物及差异剥离纸或膜技术分析
- Win10快速关机技巧:去除关机阻止功能
- 创新打印机设计:速释打印头与压纸辊安装拆卸便捷性