使用Hibernate+Struts2+Spring实现分页查询示例
4星 · 超过85%的资源 需积分: 9 149 浏览量
更新于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 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2008-09-10 上传
2011-08-01 上传
2009-07-16 上传
2012-03-09 上传
晴天_设计师
- 粉丝: 3
- 资源: 26
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析