getHibernateTemplate()和getSession()的区别
生活随笔
收集整理的這篇文章主要介紹了
getHibernateTemplate()和getSession()的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
自動(dòng)生成hibernate配置文件的時(shí)候,會(huì)在dao層用到getSession()方法來操作數(shù)據(jù)庫(kù)記錄,但是他還有個(gè)方法getHibernateTemplate(),這兩個(gè)方法究竟有什么區(qū)別呢?
1.使用getSession()方法你只要繼承sessionFactory,而使用getHibernateTemplate()方法必須繼承 HibernateDaoSupport當(dāng)然包括sessionFactory,這點(diǎn)區(qū)別都不是特別重要的,下面這些區(qū)別就很重要了
2.getSession()方法是沒有經(jīng)過spring包裝的,spring會(huì)把最原始的session給你,在使用完之后必須自己調(diào)用相應(yīng)的 close方法,而且也不會(huì)對(duì)聲明式事務(wù)進(jìn)行相應(yīng)的管理,一旦沒有及時(shí)關(guān)閉連接,就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)連接池的連接數(shù)溢出,getHibernateTemplate()方法是經(jīng)過spring封裝的,例如添加相應(yīng)的聲明式事務(wù)管理,由spring管理相應(yīng)的連接。
在實(shí)際的使用過程中發(fā)現(xiàn)的確getHibernateTemplate()比getSession()方法要好很多,但是有些方法在getHibernateTemplate()并沒有提供,這時(shí)我們用HibernateCallback 回調(diào)的方法管理數(shù)據(jù)庫(kù).
例如如下代碼:
/**
???? * 使用 hql 語句進(jìn)行操作
???? * @param hql HSQL 查詢語句(使用回調(diào)函數(shù)訪問外部變量,必須是final的)
???? * @param offset 開始取數(shù)據(jù)的下標(biāo)
??? * @param length 讀取數(shù)據(jù)記錄數(shù)
??? * @return List 結(jié)果集
*/
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 語句進(jìn)行操作
???? * @param hql HSQL 查詢語句(使用回調(diào)函數(shù)訪問外部變量,必須是final的)
???? * @param offset 開始取數(shù)據(jù)的下標(biāo)
??? * @param length 讀取數(shù)據(jù)記錄數(shù)
??? * @return List 結(jié)果集
*/
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 ;
}
總結(jié)
以上是生活随笔為你收集整理的getHibernateTemplate()和getSession()的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getHibernateTemplate
- 下一篇: 使用Struts2验证框架实现输入校验