2011-11-24 61 views
1

我們目前使用Spring MVC來實現REST Web服務。我們現在想要實現某種數據持久性,並且正在研究這些選項。 Spring Transactions + Hibernate + MySQL似乎是一種非常流行的方法,但我看過的每一篇博客/教程都會有所不同。Spring與Hibernate和SQL最佳實踐的交易

任何人都可以指導我什麼可以被認爲是使用Spring的數據持久性的「最佳做法」?我想使它基於註解,因爲這對我來說似乎更加自然和可維護。

但是現在在一些地方,我已經閱讀HibernateTemplate不應該再使用。有的人使用* Dao接口和* DaoImpl方式,而有的則使用* Service方式,@Service方式。

在此先感謝您的任何建議。

回答

4

HibernateTemplate確實不是很有用,Spring文檔建議考慮不要再使用它了。

@Repository和@Service基本上做同樣的事情,除了(據我所知)兩件事情:

  • @Repository清楚地表明,該服務是一個DAO,而不是一個商業服務
  • 拋出異常從@Repository註釋的服務被轉換爲Spring的持久性異常類。這意味着你不會得到Hibernate異常,但是Spring包裝Hibernate異常。
+1

似乎是更好的方式去使用@Repository顯式Dao接口和實現路由。 –

1

當hibernate不支持每個線程有一個會話的概念時,需要休眠模板。現在更好的方法是直接在SessionFactory上使用getCurrentSession方法。

使用HibernateTemplate的另一個問題是,如果在SessionFactory上暴露了更新的api,那麼必須等待新版本的Hibernate Template來支持它。

簡而言之,使用會話工廠直接

0

的HibernateTemplate的使用是的HibernateTemplate文檔中在

http://static.springsource.org/spring/docs/2.0.3/api/org/springframework/orm/hibernate3/HibernateTemplate.html

注氣餒:作爲休眠3.0.1,事務的Hibernate訪問代碼的也可以用普通的Hibernate風格編碼。因此,對於新開始的項目,請考慮採用基於SessionFactory.getCurrentSession()的標準Hibernate3編碼風格的數據訪問對象。 (Spring的LocalSessionFactoryBean可以自動支持Spring事務管理Hibernate3的的getCurrentSession()方法。)

@Repository或@Service的使用並沒有任何區別,但我相信,這些註釋將有進一步的DAO /服務水平的支持在將來會使他們的使用更加精確。

我個人比較喜歡使用DAO層中的@Repository來劃分我的服務和業務層。