hibernate分页程序

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值