分页支持类:
java代码: |
package com.javaeye.common.util; import java.util.List; publicclass PaginationSupport { publicfinalstaticint PAGESIZE = 30; privateint pageSize = PAGESIZE; privateList items; privateint totalCount; privateint[] indexes = newint[0]; privateint startIndex = 0; public PaginationSupport(List items, int totalCount){ public PaginationSupport(List items, int totalCount, int startIndex){ public PaginationSupport(List items, int totalCount, int pageSize, int startIndex){ publicList getItems(){ publicvoid setItems(List items){ publicint getPageSize(){ publicvoid setPageSize(int pageSize){ publicint getTotalCount(){ publicvoid setTotalCount(int totalCount){ publicint[] getIndexes(){ publicvoid setIndexes(int[] indexes){ publicint getStartIndex(){ publicvoid setStartIndex(int startIndex){ publicint getNextIndex(){ publicint getPreviousIndex(){ } |
抽象业务类
java代码: |
/** import java.io.Serializable; import org.hibernate.Criteria; import com.javaeye.common.util.PaginationSupport; publicabstractclass AbstractManager extends HibernateDaoSupport { privateboolean cacheQueries = false; privateString queryCacheRegion; publicvoid setCacheQueries(boolean cacheQueries){ publicvoid setQueryCacheRegion(String queryCacheRegion){ publicvoid save(finalObject entity){ publicvoid persist(finalObject entity){ publicvoid update(finalObject entity){ publicvoid delete(finalObject entity){ publicObject load(finalClass entity, finalSerializable id){ publicObject get(finalClass entity, finalSerializable id){ publicList findAll(finalClass entity){ publicList findByNamedQuery(finalString namedQuery){ publicList findByNamedQuery(finalString query, finalObject parameter){ publicList findByNamedQuery(finalString query, finalObject[] parameters){ publicList find(finalString query){ publicList find(finalString query, finalObject parameter){ public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria){ public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, finalint startIndex){ public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, finalint pageSize, publicList findAllByCriteria(final DetachedCriteria detachedCriteria){ publicint getCountByCriteria(final DetachedCriteria detachedCriteria){ |
用户在web层构造查询条件detachedCriteria,和可选的startIndex,调用业务bean的相应findByCriteria方法,返回一个PaginationSupport的实例ps。
ps.getItems()得到已分页好的结果集
ps.getIndexes()得到分页索引的数组
ps.getTotalCount()得到总结果数
ps.getStartIndex()当前分页索引
ps.getNextIndex()下一页索引
ps.getPreviousIndex()上一页索引
连续看了两篇robbin有关DetachedCriteria的介绍,感觉真的不错,尤其是上面的示例代码,让我着实觉得该对我原来的分页查询做一下代码重构了。
我把原本我的做法也提供出来供大家讨论吧:
首先,为了实现分页查询,我封装了一个Page类:
java代码: |
/*Created on 2005-4-14*/ /** /** |
上面的这个Page类对象只是一个完整的Page描述,接下来我写了一个PageUtil,负责对Page对象进行构造:
java代码: | ||
/*Created on 2005-4-14*/ import org.apache.commons.logging.Log; /** |