基于 Hibernate Query 实现分页器

该博客介绍了一个名为Page的分页器类,用于基于Hibernate Query进行分页操作。类中包含了设置页大小、起始页、获取查询结果、判断是否为第一页、是否有前后页等方法,并通过Query接口的scroll()、setFirstResult()和setMaxResults()方法实现分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import  java.util.List;
import  org.hibernate.HibernateException;
import  org.hibernate.Query;
import  org.hibernate.ScrollableResults;
/**
 * <p>Title:分页器</p>
 *
 * <p>Description:</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 * 
 * <p>Author: 一个人的日子</p>
 * 
 * <p>Version: 1.0</p>
 * 
 * <p>Create Date: 2006-08-17</p>
 * 
 
*/

public   class  Page  {
 
private List result;         //结果集
    private int pageSize;        //页大小
    private int startPage;       //起始页 从1开始
    private ScrollableResults scrollableResults;
    
private int totalResults;    //总记录的条数
    private int totalPages;      //总页数
    
 
public Page (int startPage,int pageSize,Query query){
  
this.startPage=startPage;
     
this.pageSize=pageSize;
     
this.result=null;     
     
try {
   
this.scrollableResults=query.scroll();
   
this.scrollableResults.last();
   
if(scrollableResults.getRowNumber()>=0){
    
this.totalResults=this.scrollableResults.getRowNumber() + 1;
   }
 else {
    
this.totalResults=0;
   }

   setTotalPages();
   result
=query.setFirstResult((this.getStartPage()-1)*this.pageSize).setMaxResults(this.pageSize).list();
  }
 catch (HibernateException e) {
   e.printStackTrace();
  }

    }

 
 
/**
  * 得到查询结果
  * 
@return 查询结果
  
*/

 
public List getResult() {  
  
return result;
 }

 
 
/**
  * 得到起始页
  * 
@return
  
*/

 
public int getStartPage() {
  
if(startPage<1){
   startPage
= 1;
  }

  
if(startPage>totalPages){
   startPage
=totalPages;
  }

  
return startPage;
 }

 
 
/**
  * 得到记录总数
  * 
@return
  
*/

 
public int getTotalResults() {
  
return totalResults;
 }

 
 
/**
  * 得到页大小
  * 
@return
  
*/

 
public int getPageSize() 
        
return pageSize; 
    }
 
 
 
/**
  * 判断是否是第一页
  * 
@return
  
*/

 
public boolean isFirstPage(){
  
return this.startPage==1;
 }

 
 
/**
  * 判断是否是有后一页
  * 
@return
  
*/

 
public boolean hasNextPage(){
  
return this.startPage<this.totalPages;
 }

 
 
/**
  * 判断是否是有前一页
  * 
@return
  
*/

 
public boolean hasPreviousPage(){
  
return this.startPage>1;
 }

 
 
/**
  * 设置总页数
  *
  
*/

 
private void setTotalPages() {
  
this.totalPages=this.totalResults/this.pageSize;
  
if(totalPages*pageSize<totalResults){
   totalPages
++;
  }

 }

 
 
/**
  * 得到总页数
  * 
@return
  
*/

 
public int getTotalPages() {
  
return totalPages;
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值