package com.jdsy.common.hibernate;import java.io.Serializable;import java.sql.Statement;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Projection;import org.hibernate.criterion.Projections;import org.springframework.dao.DataAccessException;import org.springframework.orm.ObjectRetrievalFailureException;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public abstract class BaseDAO extends HibernateDaoSupport ...{ /** *//** * 根据查询条件进行分页查询 * * @param detachedCriteria * 查询条件 * @param page * 第几页 * @param pageSize * 每页显示多少行 * @return 分页对象 * @throws DataAccessException */ public PageData findPageByCriteria( final DetachedCriteria detachedCriteria, final int page, final int pageSize) throws DataAccessException ...{ return (PageData) super.getHibernateTemplate().execute( new HibernateCallback() ...{ public Object doInHibernate(Session session) throws HibernateException ...{ org.hibernate.impl.CriteriaImpl criteria = (org.hibernate.impl.CriteriaImpl) detachedCriteria .getExecutableCriteria(session); Projection projection = criteria.getProjection(); int totalCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult()) .intValue(); if (totalCount == 0) ...{ return new PageData(); } criteria.setProjection(projection); criteria.setProjection(null); int startIndex = (page - 1) * pageSize; List list = criteria.setFirstResult(startIndex) .setMaxResults(pageSize).list(); PageData pg = new PageData(); pg.setPageSize(pageSize); pg.setPage(page); pg.setCount(totalCount); pg.setCurrentList(list); return pg; } }); }}