2012-06-02 66 views
1

我正在開發一個java應用程序。我正在考慮使用Spring MVC。但在ORM方面,我有一個決定。我研究了像Hibernate,iBatis,Spring JDBC模板等ORM。我發現iBatis和Spring JDBC模板(使用RowMapper)幾乎是相同的,您可以將每個查詢映射到一個對象。所以你必須爲每個查詢編寫一個類。Hibernate,iBatis,Spring JDBC模板,使用哪一個?

在Hibernate中,你用類來映射每個表,它減少了編寫SQL的需要。

我想Hibernate是最好的,當你不擅長於SQL。在我的情況下,我在SQL中很舒服,所以想使用iBatis或Spring JDBC模板,這將使我很好地控制SQL,這些都不那麼複雜比休眠。

但是Hibernate提供了其他ORM不提供的緩存。

所以我的問題:

  1. 哪一個iBatis的和Spring JDBC模板的使用?
  2. Hibernate緩存(或其他任何我不知道的Hibernate功能)非常好,我應該使用Hibernate而不是其他ORM?
+0

緩存可以獨立於ORM技術。 –

回答

5

我想Hibernate是最好的時候你是不是在SQL

我不同意這個想法,因爲你不是在SQL很好,你應該使用Hibernate,或者任何其他的ORM良好。

雖然Hibernate確實會爲您生成SQL,但不知道它在做什麼是性能災難的祕訣。

0

那麼,你的選擇應該取決於你正在開發的應用程序。我會說Hibernate在上面提到的ORM中是更強大的,並且擁有強大的社區和緩存非常強大。但真正強大的緩存有時是一個問題,並且它的內存密集。

我是myBatis用戶,相信這是一箇中途,並提供所有你需要的。那麼,myBatis將是我對Spring JDBC模板的個人選擇。

2

作爲一名Hibernate開發人員,我也非常擅長SQL;)事實上,我職業生涯的開始只是在關係數據庫(甚至是一些關係型數據庫)上工作。無論如何,我真的不明白手寫SQL是「更易維護」還是「更好控制」。但是,如果你確實購買了這種誤解,那麼你實際上可以告訴Hibernate你希望它用於所有涉及每個實體的CRUD操作的SQL(請參見@SQLInsert@SQLUpdate等)。

再次,我發現,幾乎不可維護。就我個人而言,我寧願讓Hibernate爲我管理INSERT/UPDATE/DELETE SQL。另一方面加載數據是我通常需要更多控制的情況。但是Hibernate(以及一般的JPA提供者)已經通過HQL/JPQL和Criteria查詢爲您提供了這種控制。在我看來,如果你依靠Session.get,你只是要求糟糕的表現。這與使用O/RM無關。這不是一個好的數據加載計劃,因爲您需要的數據量(甚至與同一個實體相關)基於應用程序用例而不同。例如,爲下拉列表加載員工需要生成部門名單的數據量大不相同。那就是控制。

通過一切手段使用什麼感覺對你最舒服,並滿足應用程序的目標/要求。只要確保技術和產品之間的比較點是事實性的,而不僅僅是誤解。

緩存對於O/RM來說是一個公平點。事實上,JPA(2.0版本)需要一定程度的緩存。但是,請注意,在O/RM級別緩存通常會導致性能下降。您確實需要了解您想要緩存的特定數據的語義。有些數據是緩存的好選擇,有些則不是。另外,緩存O/RM級別的「高於」通常要好得多。我個人認爲(1)它在抽象之間達到最佳平衡,同時仍然可以訪問SQL的能力(這在很大程度上屬於JPA提供商);(2)它具有最完整的功能在那裏設置任何持久性提供者。

+0

優秀點!剛剛幾年前,Gaven King分享了他接受採訪時談到了這些觀點 - http://www.javaperformancetuning.com/news/interview041.shtml – Shailendra