SSH的項目中,使用getHibernateTemplate 與 getSession有什么的區別?
1.使用getSession()方法你只要繼承 sessionFactory,而使用getHibernateTemplate()方法必須繼承HibernateDaoSupport當然包括 sessionFactory,這點區別都不是特別重要的,下面這些區別就很重要了
2.getSession()方法是沒有經過spring包裝 的,spring會把最原始的session給你,在使用完之后必須自己調用相應的close方法,而且也不會對聲明式事務進行相應的管理,一旦沒有及時 關閉連接,就會導致數據庫連接池的連接數溢出,getHibernateTemplate()方法是經過spring封裝的,例如添加相應的聲明式事務管 理,由spring管理相應的連接。
在實際的使用過程中發現的確getHibernateTemplate()比getSession()方法要好很多
this.getsession和this.getHibernateTemplate().getSessionFactory().getCurrentSession()/OpenSession區別
這個是hibernate與spring整合開發,讓DAO繼承了spring的HibernateDaoSupport,這樣的確能夠提高開發效率 ,但是不夠靈活,而且使DAO層依賴於spring的api,增加了耦合。但是不考慮復用的話還可以。
下面一個一個的分析: this.getsession實際上是調用了父類中的方法獲得session。使用spring管理hibernate的SessionFactory的時候,這個方法會從session池中拿出一session.這樣做有可能有問題,就是超session池連接數的時候,spring無法自動的關閉session。 不推薦使用
this.getHibernateTemplate().getSessionFactory().getCurrentSession()從spring管理的sessionFactory中創建一個綁定線程的session.spring會根據該線程的執行情況來自動判斷是關閉session還是延遲關閉。這樣做可以避免手動的管理實務,同時一個線程最多開啟和關閉一次session又可以提高程序的性能。 極力推薦使用這種方法
this.getHibernateTemplate().getSessionFactory().OpenSession。這種方法從spring管理的sessionFactory中創建一個session,此session不是線程綁定的。當執行完一個實務的時候自動關閉session.這種方法不用手動管理實務,但是同一個線程多次的開啟和關閉session,浪費系統資源和影響執行效率,正常情況下還是不要用了。