hibernate分页程序

来源:互联网 发布:鹿鼎记 七个老婆 知乎 编辑:程序博客网 时间:2024/05/15 22:03
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;
     }

    }
);
 }

}