使用Hibernate+Struts2+Spring实现分页查询示例

4星 · 超过85%的资源 需积分: 9 137 下载量 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}&currentPage=1">First</s:a></li> <s:if test="userPageResultSet.pageInfo.hasPrevious"> <li><s:a href="%{usersUrl}&currentPage=${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}&currentPage=%{pageNumber}">${pageNumber}</s:a></li> </s:iterator> <s:if test="userPageResultSet.pageInfo.hasNext"> <li><s:a href="%{usersUrl}&currentPage=${userPageResultSet.pageInfo.currentPage + 1}">Next</s:a></li> </s:if> <li><s:a href="%{usersUrl}&currentPage=%{userPageResultSet.pageInfo.totalPage}">Last</s:a></li> </ul> ``` 这样,我们就完成了基于Hibernate、Struts2和Spring的分页功能实现。这个实例展示了如何在Java Web开发中,通过整合这三个框架,有效地管理和展示大量数据,提高用户界面的交互性和性能。