应用Hibernate3的DetachedCriteria实现分页查询

Hibernate3提供了DetachedCriteria,使得我们可以在Web层构造detachedCriteria,然后调用业务层Bean,进行动态条件查询,根据这一功能,我设计了通用的抽象Bean基类和分页类支持,代码来自于Quake Wang的javaeye-core包的相应类,然后又做了很多修改。

分页支持类:
package  com.iteye.common.util;   
  
import  java.util.List;   
  
public   class  PaginationSupport  ... {   
  
    
public final static int PAGESIZE = 30;   
  
    
private int pageSize = PAGESIZE;   
  
    
private List items;   
  
    
private int totalCount;   
  
    
private int[] indexes = new int[0];   
  
    
private int startIndex = 0;   
  
    
public PaginationSupport(List items, int totalCount) ...{   
        setPageSize(PAGESIZE);   
                setTotalCount(totalCount);   
        setItems(items);           
        setStartIndex(
0);   
    }
   
  
    
public PaginationSupport(List items, int totalCount, int startIndex) ...{   
                setPageSize(PAGESIZE);   
        setTotalCount(totalCount);   
        setItems(items);           
        setStartIndex(startIndex);   
    }
   
  
    
public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) ...{   
                setPageSize(pageSize);   
        setTotalCount(totalCount);   
        setItems(items);   
        setStartIndex(startIndex);   
    }
   
  
    
public List getItems() ...{   
        
return items;   
    }
   
  
    
public void setItems(List items) ...{   
        
this.items = items;   
    }
   
  
    
public int getPageSize() ...{   
        
return pageSize;   
    }
   
  
    
public void setPageSize(int pageSize) ...{   
        
this.pageSize = pageSize;   
    }
   
  
    
public int getTotalCount() ...{   
        
return totalCount;   
    }
   
  
    
public void setTotalCount(int totalCount) ...{   
        
if (totalCount > 0...{   
            
this.totalCount = totalCount;   
            
int count = totalCount / pageSize;   
            
if (totalCount % pageSize > 0)   
                count
++;   
            indexes 
= new int[count];   
            
for (int i = 0; i < count; i++...{   
                indexes[i] 
= pageSize * i;   
            }
   
        }
 else ...{   
            
this.totalCount = 0;   
        }
   
    }
   
  
    
public int[] getIndexes() ...{   
        
return indexes;   
    }
   
  
    
public void setIndexes(int[] indexes) ...{   
        
this.indexes = indexes;   
    }
   
  
    
public int getStartIndex() ...{   
        
return startIndex;   
    }
   
  
    
public void setStartIndex(int startIndex) ...{   
        
if (totalCount <= 0)   
            
this.startIndex = 0;   
        
else if (startIndex >= totalCount)   
            
this.startIndex = indexes[indexes.length - 1];   
        
else if (startIndex < 0)   
            
this.startIndex = 0;   
        
else ...{   
            
this.startIndex = indexes[startIndex / pageSize];   
        }
   
    }
   
  
    
public int getNextIndex() ...{   
        
int nextIndex = getStartIndex() + pageSize;   
        
if (nextIndex >= totalCount)   
            
return getStartIndex();   
        
else  
            
return nextIndex;   
    }
   
  
    
public int getPreviousIndex() ...{   
        
int previousIndex = getStartIndex() - pageSize;   
        
if (previousIndex < 0)   
            
return 0;   
        
else  
            
return previousIndex;   
    }
   
  
}
  

 业务抽象类:

 

/** */ /**  
 * Created on 2005-7-12  
 
*/
  
package  com.iteye.common.business;   
  
import  java.io.Serializable;   
import  java.util.List;   
  
import  org.hibernate.Criteria;   
import  org.hibernate.HibernateException;   
import  org.hibernate.Session;   
import  org.hibernate.criterion.DetachedCriteria;   
import  org.hibernate.criterion.Projections;   
import  org.springframework.orm.hibernate3.HibernateCallback;   
import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  
import  com.iteye.common.util.PaginationSupport;   
  
public   abstract   class  AbstractManager  extends  HibernateDaoSupport  ... {   
  
    
private boolean cacheQueries = false;   
  
    
private String queryCacheRegion;   
  
    
public void setCacheQueries(boolean cacheQueries) ...{   
        
this.cacheQueries = cacheQueries;   
    }
   
  
    
public void setQueryCacheRegion(String queryCacheRegion) ...{   
        
this.queryCacheRegion = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值