应用Hibernate3的DetachedCriteria实现分页查询

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

 

分页支持类: 

java代码: 


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; 
}
 

}

 


抽象业务类 
java代码: 


/** */ /** 
* 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 = queryCacheRegion; 
}
 

public void save(final Object entity) ...
getHibernateTemplate().save(entity); 
}
 

public void persist(final Object entity) ...
getHibernateTemplate().save(entity); 
}
 

你可能感兴趣的:(Web,bean,Hibernate,orm)