/**
* 扩展的 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 ;
}
}
* 扩展的 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 ;
}
}
扩展Hibernate分页查询
本文介绍了一种扩展的HibernateDaoSupport类,通过自定义方法提高了HibernateTemplate的灵活性,特别是针对分页查询的需求提供了多种HQL分页查询实现。
2272

被折叠的 条评论
为什么被折叠?



