getHibernateTemplate()和getSession()的区别
生活随笔
收集整理的這篇文章主要介紹了
getHibernateTemplate()和getSession()的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
自動生成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 ;
}
???? * 使用 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 ;
}
總結
以上是生活随笔為你收集整理的getHibernateTemplate()和getSession()的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getHibernateTemplate
- 下一篇: 使用Struts2验证框架实现输入校验