集成Spring后HibernateTemplate实现分页

时间:2021-03-16 22:17:21

spring 整合 hibernate 时候用的 HibernateTemplate 不支持分页,因此需要自己包装一个类进行分页,具体实现如下...使用spring的hibernateTemplate的回调机制扩展hibernateTemplate的功能实现分页

/**   
* 使用hql 语句进行操作   
  
   * @param hql   
* @param offset   
* @param length   
* @return List   
*/    
public List getListForPage(final String hql, final int offset,     
    final int length) {     
   List list = getHibernateTemplate().executeFind(new HibernateCallback() {     
    public Object doInHibernate(Session session)     
      throws HibernateException, SQLException {     
     Query query = session.createQuery(hql);     
     query.setFirstResult(offset);     
     query.setMaxResults(length);     
     List list = query.list();     
     return list;     
    }     
   });     
   return list;     
}/**   
* 使用criterion进行操作   
* @param arg   
* @param criterions   
* @param offset   
* @param length   
* @return List   
*/    
protected List getListForPage(final Class arg, final Criterion[] criterions,final int offset, final int length) {     
   List list = getHibernateTemplate().executeFind(new HibernateCallback() {     
    public Object doInHibernate(Session session)     
      throws HibernateException, SQLException {     
     Criteria criteria = session.createCriteria(arg);     
     //循环遍历添加约束条件     
     for (int i = 0; i < criterions.length; i++) {     
      criteria.add(criterions[i]);     
     }     
     criteria.setFirstResult(offset);     
     criteria.setMaxResults(length);     
     return criteria.list();     
    }     
   });     
   return list;     
}     
    
// 获得集合的总数(聚合查询)     
    public Integer getSaleChanceListCount() {     
        final String hql = "select count(*) from SaleChanceInfo si";     
        Integer result = null;     
        result = (Integer)getHibernateTemplate().execute(new HibernateCallback() {     
    
            public Object doInHibernate(Session arg0)     
                    throws HibernateException, SQLException {     
                Query query = arg0.createQuery(hql);     
                return query.uniqueResult();     
            }     
    
        });     
        return result;     
    }