扩展的 HibernateDaoSupport,

扩展Hibernate分页查询
本文介绍了一种扩展的HibernateDaoSupport类,通过自定义方法提高了HibernateTemplate的灵活性,特别是针对分页查询的需求提供了多种HQL分页查询实现。
/**
 * 扩展的 HibernateDaoSupport, 解决了 hibernateTemplate 灵活性不足的方面
 */
@SuppressWarnings("rawtypes")
public class ExtendHibernateDaoSupport extends HibernateDaoSupport{


/**
* 使用 hql 语句进行分页查询
* @param hql : hql 语句
* @param offfset : 每页的第一条记录: (page - 1) * size
* @param pageSize  :  每页显示记录数: size
* @return  当前页的多条记录
* 注意: 当方法中的局部变量传递给它的内部类使用时,必须把该变量声明为 final
*/
public List findByPage(final String hql, final int offfset,
final int pageSize) {


// 通过一个 HibernateCallback 对象来查询
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
// 实现 HibernateCallback 接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// 执行 hibernate 分页查询
List result = session.createQuery(hql) 
.setFirstResult(offfset)
.setMaxResults(pageSize)
.list();
return result;
}
});


return list;
}

/**
* 使用 hql 语句进行分页查询
* @param hql
* @param value
* @param offset
* @param pageSize
* @return 本页查询结果
*/
public List findByPage(final String hql,final Object value, final int offset, final int pageSize){

List list = getHibernateTemplate().executeFind(new HibernateCallback() {


public Object doInHibernate(Session arg0)
throws HibernateException, SQLException {

List result = arg0.createQuery(hql)
         .setFirstResult(offset)
         .setParameter(0, value)   //为 hql 传入参数
         .setMaxResults(pageSize)
         .list();
return result;
}

});
return list;
}

/**
* 使用 hql 进行分页查询
* @param hql
* @param values
* @param offset
* @param pageSize
* @return   当前页的所有记录
*/
public List findByPage(final String hql, final Object[] values, final int offset, final int pageSize){

List list = getHibernateTemplate().executeFind(new HibernateCallback() {


public Object doInHibernate(Session arg0)
throws HibernateException, SQLException {


Query query = arg0.createQuery(hql);
for(int i=0; i<values.length; i++){
query.setParameter(i, values[i]);
}
List result =query .setFirstResult(offset)
        .setMaxResults(pageSize)
          .list();
return result;
}
});

return list ;
}
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值