使用 HibernateTemplate 实现分页查询 (HibernateCallback接口)

 

        HibernateTemplate 只支持 .setMaxResults(int) 方法。
        因此,做 Spring+Hibernate 分页处理要使用到一个接口 org.springframework.orm.hibernate3.HibernateCallback
来灵活操作数据库,该接口中有一个未实现的方法 Object doInHibernate (Session session),用以获得并利用 session 进行操作(自动创建、销毁)。

以下代码均参考了 使用 HibernateTemplate 实现分页查询 一文。

ExpandedBlockStart.gif ContractedBlock.gif /** */ /**
InBlock.gif * 
ExpandedBlockEnd.gif 
*/

None.gif
package  springdao;
None.gif
None.gif
import  hibernatedao.HibernateSessionFactory;
None.gif
import  java.sql.SQLException;
None.gif
import  java.util.List;
None.gif
import  org.apache.commons.logging.Log;
None.gif
import  org.apache.commons.logging.LogFactory;
None.gif
import  org.hibernate.HibernateException;
None.gif
import  org.hibernate.Session;
None.gif
import  org.springframework.orm.hibernate3.HibernateCallback;
None.gif
import  org.springframework.orm.hibernate3.HibernateTemplate;
None.gif
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/** */ /**
InBlock.gif * 通用 DAO 包
InBlock.gif * 
@author kiant
InBlock.gif * 
@version Sep 7, 2008
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gifContractedBlock.gif
public   class  CommomsDAO  dot.gif {
InBlock.gif    
private static final Log log = LogFactory.getLog(EcOpusDAO.class);
InBlock.gif    
//获得会话
InBlock.gif
    private static HibernateTemplate hibernateTemplate = new HibernateTemplate(HibernateSessionFactory.getSessionFactory());
InBlock.gif    
InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/** *//**
InBlock.gif     * 分页通用方法
InBlock.gif     * 
@param hql  HQL查询语句
InBlock.gif     * 
@param offset    起始记录下标
InBlock.gif     * 
@param lengh        读取记录数
InBlock.gif     * 
@return            List 结果集
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gifContractedSubBlock.gif    
public static List getListForPage(final String hql, final int offset, final int lengh) dot.gif{
InBlock.gif        log.debug(
"finding ListForPage");
ExpandedSubBlockStart.gifContractedSubBlock.gif        
try dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            List list 
= hibernateTemplate.executeFind(new HibernateCallback()dot.gif{
InBlock.gif
InBlock.gif                
public Object doInHibernate(Session session)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
throws HibernateException, SQLException dot.gif{
InBlock.gif                    List list2 
= session.createQuery(hql)
InBlock.gif                            .setFirstResult(offset)
InBlock.gif                            .setMaxResults(lengh)
InBlock.gif                            .list();                    
InBlock.gif                    
return list2;
ExpandedSubBlockEnd.gif                }
}
);
InBlock.gif            
return list;
ExpandedSubBlockStart.gifContractedSubBlock.gif        }
 catch (RuntimeException re) dot.gif{
InBlock.gif            log.error(
"find ListForPage failed", re);
InBlock.gif            
throw re;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif



ps.
也可以通过:
        this.getSession();
        this.getHibernateTemplate().getSessionFactory().openSession();
分别获取 session 进行 createQuery()等操作。
但是这种做法,需要自己去手动关闭session的。所以你需要配置openSessioninview,不推荐使用!

转载于:https://www.cnblogs.com/kiant71/archive/2008/09/07/1752071.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值