Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

          在前一篇日志中自動生成hibernate配置文件的時候,會在dao層用到getSession()方法來操作數據庫記錄,但是他還有個方法getHibernateTemplate(),這兩個方法究竟有什么區別呢?

          1.使用getSession()方法你只要繼承sessionFactory,而使用getHibernateTemplate()方法必須繼承 HibernateDaoSupport當然包括sessionFactory,這點區別都不是特別重要的,下面這些區別就很重要了

          2.getSession()方法是沒有經過spring包裝的,spring會把最原始的session給你,在使用完之后必須自己調用相應的 close方法,而且也不會對聲明式事務進行相應的管理,一旦沒有及時關閉連接,就會導致數據庫連接池的連接數溢 出,getHibernateTemplate()方法是經過spring封裝的,例如添加相應的聲明式事務管理,由spring管理相應的連接。

          在實際的使用過程中發現的確getHibernateTemplate()比getSession()方法要好很多,但是有些方法在getHibernateTemplate()并沒有提供,這時我們用HibernateCallback 回調的方法管理數據庫.

          例如如下代碼:

          /**
               * 使用 hql 語句進行操作
               * @param hql HSQL 查詢語句(使用回調函數訪問外部變量,必須是final的)
               * @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 ;
          }

          posted on 2010-02-22 16:43 seal 閱讀(460) 評論(0)  編輯  收藏 所屬分類: SpringHibernate
          主站蜘蛛池模板: 莱芜市| 莱阳市| 襄樊市| 瑞金市| 桦甸市| 黔江区| 嵊州市| 赤城县| 南康市| 琼结县| 于都县| 东丰县| 永德县| 开鲁县| 吉林省| 秭归县| 德保县| 伊宁县| 铁岭市| 庄河市| 洮南市| 丰原市| 兰坪| 宾川县| 理塘县| 临颍县| 长汀县| 苏尼特左旗| 澄迈县| 仁寿县| 杭州市| 静海县| 永川市| 舒城县| 石林| 珲春市| 花莲市| 英山县| 葵青区| 鄢陵县| 安顺市|