SSH框架下实现分页查询的PageResultSet类与PageInfo类解析
1星 需积分: 9 84 浏览量
更新于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`类的定义使得分页逻辑更加清晰,易于维护。
2015-03-29 上传
2012-09-26 上传
2012-10-12 上传
2012-08-12 上传
2012-07-05 上传
2008-10-06 上传
2013-08-19 上传
2008-12-08 上传
2011-05-06 上传
sq普罗旺斯
- 粉丝: 0
- 资源: 3
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程