SSH框架下实现分页查询的PageResultSet类与PageInfo类解析
1星 需积分: 9 98 浏览量
更新于2024-07-27
收藏 62KB DOC 举报
"SSH分页实现教程"
在Java Web开发中,SSH(Struts2、Spring、Hibernate)是一个常见的开源框架组合,用于构建高效、可扩展的企业级应用。本实例将介绍如何利用SSH框架来实现分页功能,提高用户体验并优化数据库查询性能。
首先,我们来看一下分页的核心类`PageResultSet`。这个类是用来封装查询结果和分页信息的容器。`PageResultSet<T>`是一个泛型类,允许存储任何类型的数据集合。`list`字段存储了当前页的数据,而`pageInfo`字段则包含了与分页相关的详细信息,如总记录数、总页数等。
```java
public class PageResultSet<T> {
private List<T> list;
private PageInfo pageInfo;
// getters and setters
}
```
接着,我们定义了`PageInfo`类,用于存储分页的详细信息:
```java
public class PageInfo {
private int totalRow; // 总记录数
private int totalPage; // 总页数
private int currentPage = 1; // 当前页,默认为1
private int pageSize = 20; // 页的大小
private boolean hasPrevious;
private boolean hasNext;
private boolean bof; // 是否在页首
private boolean eof; // 是否在页尾
// 构造方法和其他相关方法
}
```
在SSH框架中,通常我们会使用Hibernate作为持久层框架,它提供了一种基于HQL(Hibernate Query Language)的分页查询方式。在服务层(Service Layer),我们需要编写一个方法,该方法接收当前页数和每页大小作为参数,然后调用Hibernate的`setFirstResult()`和`setMaxResults()`方法来实现分页。
```java
public PageResultSet<User> getUsersByPage(int currentPage, int pageSize) {
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(User.class);
criteria.setFirstResult((currentPage - 1) * pageSize);
criteria.setMaxResults(pageSize);
List<User> userList = criteria.list();
// 计算总页数和总记录数
Long totalRows = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
int totalPage = (int) Math.ceil((double) totalRows / pageSize);
PageInfo pageInfo = new PageInfo();
pageInfo.setTotalRow(totalRows.intValue());
pageInfo.setTotalPage(totalPage);
pageInfo.setCurrentPage(currentPage);
pageInfo.setPageSize(pageSize);
// 设置hasPrevious、hasNext、bof、eof状态
// ...
PageResultSet<User> result = new PageResultSet<>();
result.setList(userList);
result.setPageInfo(pageInfo);
return result;
}
```
在表现层(Presentation Layer),即Struts2控制器,我们将调用服务层的方法,并将返回的`PageResultSet`对象传递给视图层(View Layer)。视图层通常是一个JSP页面,可以通过EL表达式或Struts2标签来显示分页信息和数据。
```jsp
<display:table name="pageResultSet.list" export="false" pagesize="${pageResultSet.pageSize}" requestURI="/users.action">
<!-- 表格内容 -->
</display:table>
<!-- 分页链接 -->
<display:pagination page="pageResultSet.currentPage" totalPages="pageResultSet.totalPage" />
```
至此,SSH框架下的分页功能就实现了。通过这样的设计,我们能够轻松地在前端展示分页数据,并且在后端有效地管理数据库查询,避免一次性加载大量数据导致的性能问题。同时,`PageResultSet`和`PageInfo`类的定义使得分页逻辑更加清晰,易于维护。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-10-12 上传
139 浏览量
2012-07-05 上传
201 浏览量
118 浏览量
2008-10-06 上传
sq普罗旺斯
- 粉丝: 0
- 资源: 3
最新资源
- javaeye月刊2008年5月 总第3期.pdf
- PCS 7 HORN 功能使用入門
- javaeye月刊2008年4月 总第2期.pdf
- Oracle10g RAC with ocfs在windows安装
- javaeye月刊2008年3月 总第1期.pdf
- memcached 架设
- 增加反向连接101方法 pdf
- as cook book
- HP OpenView 网络节点管理器安装快速入门
- HP OpenView Network Node Manager创建和使用注册文件
- 学习JavaFX脚本语言_翻译_.pdf
- Google搜索引擎优化指南
- TD7.6 ,管理员指南
- 电子元件基础认识,电子元件基础认识
- 测试工具的选择和使用
- 电力系统继电保护技术的现状与发展