1. 分页的基础代码,其中我们最需要的就是设置开始和结束的index。
public List<T> queryByPage(String hql, int beginIndex, int pageSize) { Session session = hibernateTemplate.getSessionFactory().getCurrentSession(); Query query = session.createQuery(hql); query.setFirstResult(beginIndex); query.setMaxResults(pageSize); List<T> list = query.list(); return list; }
开始结束的index也不能直接写,因为可能越界了。所以一般在编写分页显示页面信息的时候,我们需要知道的信息包括最基本的pageNumber、pageSize、totalRecordAcount,这样就可以计算出正确的开始结束index。还有为了显示与隐藏“下一页”和“上一页”按钮的两个boolean值hasNextPage与hasPreviousPage。当然,为了更好的显示,你可能还需要其他的一些信息。这时我们就可以把这些信息统一写到一个PageInfo类中方便统一的管理,代码如下:
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; /* * 构造方法 @param totalRow 总记录数 @param pageSize 页的大小 @param page 页码 */ public PageInfo(int totalRow, int pageSize, int page) { this.totalRow = totalRow; this.pageSize = pageSize; // 根据页大小和总记录数计算出总页数 this.totalPage = countTotalPage(this.pageSize, this.totalRow); // 修正当前页 setCurrentPage(page); init(); } public int getTotalPage() { return totalPage; } public int getCurrentPage() { return this.currentPage; } // 修正计算当前页 public void setCurrentPage(int currentPage) { if(currentPage>this.totalPage){ this.currentPage=this.totalPage; }else if (currentPage<1){ this.currentPage=1; } else{ this.currentPage=currentPage; } } // 获取分页大小 public int getPageSize() { return pageSize; } // 设置分页大小 public void setPageSize(int pageSize) { this.pageSize = pageSize; } // 获取当前页记录的开始索引 public int getBeginIndex() { int beginIndex = (currentPage - 1) * pageSize; // 索引下标从0开始 return beginIndex; } // 计算总页数 public int countTotalPage(int pageSize, int totalRow) { int totalPage = totalRow % pageSize == 0 ? totalRow / pageSize : totalRow / pageSize + 1; return totalPage; } // 返回下一页的页码 public int getNextPage() { if (currentPage + 1 >= this.totalPage) { // 如果当前页已经是最后页 则返回最大页 return this.totalPage; } return currentPage + 1; } // 返回前一页的页码 public int getPreviousPage() { if (currentPage - 1 <= 1) { return 1; } else { return currentPage - 1; } } public boolean isHasPrevious() { return hasPrevious; } public boolean isHasNext() { return hasNext; } public boolean isBof() { return bof; } public boolean isEof() { return eof; } public boolean hasNext() { return currentPage < this.totalPage; } public boolean hasPrevious() { return currentPage > 1; } public boolean isFirst() { return currentPage == 1; } public boolean isLast() { return currentPage >= this.totalPage; } // 初始化信息 private void init() { this.hasNext = hasNext(); this.hasPrevious = hasPrevious(); this.bof = isFirst(); this.eof = isLast(); } }
初始化的时候只需要三个输入,int totalRow, int pageSize, int page,然后其他的值都直接通过计算得到。
2. 为了方便存储查询得到的信息,我们可以再设置一个类PageResultSet来存储pageInfo实例和resultList。代码如下:
import java.util.List; /** *该类描述了一个分页数据集 list中是查询的数据集合 ,pageInfo则描述了附加的页相关的信息 */ public class PageResultSet<T> { private List<T> list; //当前页的数据信息 private PageInfo pageInfo; //当前页的信息 public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } public PageInfo getPageInfo() { return pageInfo; } public void setPageInfo(PageInfo pageInfo) { this.pageInfo = pageInfo; } }
3. 之后便可以利用上面的两个类来方便的查询分页信息了。
实例代码:
public PageResultSet<BookInfo> queryByPage(String hql,int pageSize, int page) { int totalRow = bookInfoDao.queryRowCount(hql); // 计算总记录个数 PageInfo pageinfo = new PageInfo(totalRow, pageSize, page); //获取该页的记录 List<BookInfo> list = bookInfoDao.queryByPage(hql, pageinfo.getBeginIndex(), pageinfo.getPageSize()); PageResultSet<BookInfo> pageResultSet = new PageResultSet<BookInfo>(); pageResultSet.setList(list); System.out.println(totalRow); pageResultSet.setPageInfo(pageinfo); return pageResultSet; }
相关推荐
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...
在"Struts + Hibernate 分页实现"这个项目中,重点在于如何在Web应用中整合这两个框架,并实现数据的分页显示。分页是大型数据集处理时常见的需求,它能够帮助用户更有效地浏览和管理大量信息,避免一次性加载所有...
一、Hibernate分页基础 1. Hibernate的Query和Criteria API都提供了分页功能。使用`setFirstResult()`方法设置查询开始的位置,即第几条记录,以及`setMaxResults()`方法设置一次返回的最大记录数,这两者结合即可...
根据提供的标题、描述以及部分内文,我们可以梳理出关于如何使用Struts2与Hibernate实现分页功能的关键知识点。 ### Struts2与Hibernate简介 - **Struts2**:这是一个基于MVC架构的开源Web框架,它能帮助开发者...
在本文中,我们将深入探讨如何使用Spring Boot与Hibernate框架实现简单的分页功能。Spring Boot以其简洁的配置和快速的应用开发而受到广泛欢迎,而Hibernate作为Java领域中的一个强大的ORM(对象关系映射)工具,...
- Hibernate中的`Criteria`和`Query`接口都提供了`setFirstResult`和`setMaxResult`方法来实现分页。其中`setFirstResult`设置的是查询结果中的第一个记录的索引位置,索引从0开始。 - 比如,如果当前页为2,每页...
这样的分页实现保证了数据的高效加载和用户的流畅体验,同时充分利用了Struts的控制层和Hibernate的数据访问层能力,降低了开发复杂度。在实际项目中,还可以考虑优化如缓存、懒加载等策略来进一步提高性能。
在分页实现中,MySQL的SQL语句支持LIMIT和OFFSET关键字,这正是我们控制返回结果数量和跳过特定数量记录的关键。例如,我们可以使用`SELECT * FROM table LIMIT pageSize OFFSET (pageNumber - 1) * pageSize`来获取...
#### 三、Hibernate分页查询实现原理 ##### 3.1 使用SQL LIMIT实现分页 对于支持LIMIT关键字的数据库(例如MySQL),Hibernate会通过特定的方言(Dialect)来生成包含LIMIT关键字的SQL语句。具体实现如下: ```...
1. **对象关系映射(ORM)**: Hibernate通过映射Java类到数据库表,将对象的实例与数据库记录关联起来,实现了对象层和数据层的解耦。 2. **Entity**: Hibernate中的实体代表数据库中的表,它们通常是Java类,通过...
总结,Hibernate ORM 5.3.2.Final版本是Java开发者实现高效数据库操作的强大工具,其丰富的特性和优化,使得开发者能更加专注于业务逻辑,而非底层数据库操作。正确理解和运用Hibernate,将极大地提升开发效率和软件...
标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...
### Hibernate分页基础 1. **Criteria API**:Hibernate的Criteria API允许我们创建动态查询,同时也支持分页。通过设置`setFirstResult()`和`setMaxResults()`方法,可以实现分页效果。例如: ```java Criteria ...
hibernate_mysql_struts2 实现的通用分页类.欢迎指正
#### Hibernate中的分页实现 在Hibernate框架中实现分页功能相对较为简单。通过`Query`对象提供的方法即可轻松完成。 ##### 示例代码解析 ```java Query query = session.createQuery("from Student"); query....
这些示例涵盖了从基本的实体定义、配置,到复杂的查询、关联映射,通过实际操作,你可以深入理解Hibernate的工作原理和使用方法。 1. 实体管理:了解如何定义实体类,以及如何使用注解进行元数据配置。 2. 数据库...
java+hibernate实现分页 public String execute() throws Exception { System.out.println("Page:" + page); pagePlanList = ps.findPlantByPage(page, rowsPerPage); totalPage = ps.getPlanTotalPage...
本篇文章将详细讲解如何在基于Struts2、Spring和Hibernate的项目中实现分页功能。 首先,我们从DAO层开始。在`MemberDao`接口中,我们定义了两个关键的方法,一个是用于分页查询,另一个是获取所有记录的数量。这两...
hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网http://www.datatables.net/,datatables的功能很 全面。 2,建表的sql--studentinfo和插入...