隨筆-7  評(píng)論-24  文章-102  trackbacks-0

                  HibernateTemplate 只支持 .setMaxResults(int) 方法。
                  因此,做 Spring+Hibernate 分頁(yè)處理要使用到一個(gè)接口 org.springframework.orm.hibernate3.HibernateCallback
          來(lái)靈活操作數(shù)據(jù)庫(kù),該接口中有一個(gè)未實(shí)現(xiàn)的方法 Object doInHibernate (Session session),用以獲得并利用 session 進(jìn)行操作(自動(dòng)創(chuàng)建、銷毀)。

          以下代碼均參考了 使用 HibernateTemplate 實(shí)現(xiàn)分頁(yè)查詢 一文。

          /**
           * 
           
          */

          package springdao;

          import hibernatedao.HibernateSessionFactory;
          import java.sql.SQLException;
          import java.util.List;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import org.hibernate.HibernateException;
          import org.hibernate.Session;
          import org.springframework.orm.hibernate3.HibernateCallback;
          import org.springframework.orm.hibernate3.HibernateTemplate;



          /**
           * 通用 DAO 包
           * 
          @author kiant
           * 
          @version Sep 7, 2008
           
          */

          public class CommomsDAO {
              
          private static final Log log = LogFactory.getLog(EcOpusDAO.class);
              
          //獲得會(huì)話
              private static HibernateTemplate hibernateTemplate = new HibernateTemplate(HibernateSessionFactory.getSessionFactory());
              
              
              
          /**
               * 分頁(yè)通用方法
               * 
          @param hql  HQL查詢語(yǔ)句
               * 
          @param offset    起始記錄下標(biāo)
               * 
          @param lengh        讀取記錄數(shù)
               * 
          @return            List 結(jié)果集
               
          */

              
          public static List getListForPage(final String hql, final int offset, final int lengh) {
                  log.debug(
          "finding ListForPage");
                  
          try {
                      List list 
          = hibernateTemplate.executeFind(new HibernateCallback(){

                          
          public Object doInHibernate(Session session)
                                  
          throws HibernateException, SQLException {
                              List list2 
          = session.createQuery(hql)
                                      .setFirstResult(offset)
                                      .setMaxResults(lengh)
                                      .list();                    
                              
          return list2;
                          }
          }
          );
                      
          return list;
                  }
           catch (RuntimeException re) {
                      log.error(
          "find ListForPage failed", re);
                      
          throw re;
                  }

              }

          }



          ps.
          也可以通過(guò):
                  this.getSession();
                  this.getHibernateTemplate().getSessionFactory().openSession();
          分別獲取 session 進(jìn)行 createQuery()等操作。
          但是這種做法,需要自己去手動(dòng)關(guān)閉session的。所以你需要配置openSessioninview,不推薦使用!
          posted on 2008-09-07 11:25 黃小二 閱讀(3004) 評(píng)論(1)  編輯  收藏 所屬分類: S/S2SH

          評(píng)論:
          # re: 使用 HibernateTemplate 實(shí)現(xiàn)分頁(yè)查詢 (HibernateCallback接口) 2014-03-03 22:32 | redcoatjk
          可以強(qiáng)制加載后 close session.
          --------
          此外直接用HibernateTemplate.getSessionFactory.getCurrentSession
          應(yīng)該是可以托管給spring管理的.  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 浪卡子县| 丰宁| 金昌市| 松溪县| 平遥县| 郎溪县| 阜平县| 米林县| 宜州市| 南雄市| 平潭县| 历史| 兖州市| 正蓝旗| 乐业县| 乡宁县| 商水县| 霍林郭勒市| 鹤峰县| 恭城| 晋中市| 鞍山市| 通榆县| 上高县| 远安县| 沈丘县| 吉林市| 东乌珠穆沁旗| 西乌珠穆沁旗| 万盛区| 肥城市| 旅游| 天峨县| 建昌县| 仪陇县| 宜兴市| 措美县| 舟山市| 紫云| 仙游县| 安阳市|