getHibernateTemplate()与getSession()的区别
1.
getHibernateTemplate已經(jīng)封裝好了一些基本的方法,可以直接去用
而getSession只是獲取一個(gè)數(shù)據(jù)工廠的session,然后大部分方法都需要自己寫,加hql語句,然后用query方法執(zhí)行
?
2.
HibernateTemplate 提供非常多的常用方法來完成基本的操作,比如通常的增加、刪除、修改、查詢等操作,Spring 2.0更增加對(duì)命名SQL查詢的支持,也增加對(duì)分頁(yè)的支持。大部分情況下,使用Hibernate的常規(guī)用法,就可完成大多數(shù)DAO對(duì)象的CRUD操作。 下面是HibernateTemplate的常用方法簡(jiǎn)介:?
q void delete(Object entity):刪除指定持久化實(shí)例?
q deleteAll(Collection entities):刪除集合內(nèi)全部持久化類實(shí)例?
q find(String queryString):根據(jù)HQL查詢字符串來返回實(shí)例集合?
q findByNamedQuery(String queryName):根據(jù)命名查詢返回實(shí)例集合?
q get(Class entityClass, Serializable id):根據(jù)主鍵加載特定持久化類的實(shí)例?
q save(Object entity):保存新的實(shí)例?
q saveOrUpdate(Object entity):根據(jù)實(shí)例狀態(tài),選擇保存或者更新?
q update(Object entity):更新實(shí)例的狀態(tài),要求entity是持久狀態(tài)?
q setMaxResults(int maxResults):設(shè)置分頁(yè)的大小
例如如下代碼:
[java] view plaincopy
?
3.
使用getSession()方法你只要繼承 sessionFactory,而使用getHibernateTemplate()方法必須繼承HibernateDaoSupport當(dāng)然包括 sessionFactory
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ù).
例如如下代碼:
[java] view plaincopy
采用這種做法的好處是:不用關(guān)心事務(wù)。session的創(chuàng)建和銷毀,一切都在程序內(nèi)部完成。看看名字doInHibernate就知道好處了。不好的是程序看起來比較亂!
總結(jié)
以上是生活随笔為你收集整理的getHibernateTemplate()与getSession()的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse 用Hibernate T
- 下一篇: getHibernateTemplate