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 閱讀(454) 評論(0)  編輯  收藏 所屬分類: SpringHibernate
          主站蜘蛛池模板: 贵定县| 石河子市| 伊宁县| 江陵县| 宁都县| 宜宾市| 阜康市| 于都县| 新昌县| 定远县| 嘉祥县| 惠东县| 洞口县| 洪江市| 四子王旗| 广灵县| 黑水县| 大余县| 莎车县| 开封市| 尚义县| 榕江县| 泰州市| 天水市| 五家渠市| 曲阜市| 潞西市| 依安县| 威远县| 静海县| 屏南县| 北流市| 英吉沙县| 永新县| 汶上县| 都昌县| 大余县| 大同县| 阜康市| 康定县| 贵港市|