jooq_jOOQ与Hibernate:何时选择哪个
jooq
Hibernate已成為Java生態系統中的事實上的標準,事實上, 如果標準對您很重要 ,并且如果您將JCP與ISO,ANSI,IEEE等置于同一級別,那么Hibernate也是實際的JavaEE標準實現。
本文的目的不是討論標準,而是討論愿景。 Hibernate贊同JPA的ORM愿景。 jOOQ擁有SQL強大查詢的愿景,因此,為了爭辯,讓我們互換使用Hibernate / JPA / ORM,就像jOOQ / JDBC / SQL一樣。
為什么現在不應該有人使用Hibernate的問題經常出現 -正是因為Hibernate是事實上的標準,并且是許多其他框架(例如Grails( 使用GORM,又使用Hibernate ))中的第一個框架選擇。
但是,即使是Hibernate的創建者Gavin King,也不認為Hibernate應該用于所有方面 :
如果是這樣,您是否可以考慮任何客觀的決策幫助點,何時使用ORM以及何時使用SQL?
高水平的討論
首先,讓我們將討論提高到更高的水平。 與其在Hibernate和jOOQ之間確定它們各自域的具體實現,不如考慮ORM與SQL以及它們的不同用例。
在確定ORM(例如Hibernate)和SQL(例如jOOQ)之間時,您應該問自己的驅動問題不是項目復雜性問題。 我們一些要求最苛刻的客戶正在對具有數千個表/視圖的中型架構使用jOOQ。 通常,這些模式被極端標準化,有時甚至部署在多達六個不同的RDBMS上。 jOOQ專為在這些情況下工作而設計,同時也牢記了簡單的用例。
因此,與其考慮項目的復雜性,不如問自己以下問題:
這里的一個主要方面是從數據庫是否可以在您的應用程序中生存的角度來考慮您是否“關心”數據庫的問題。 很多時候,應用程序來來往往。 它們可能會用Python / JavaScript等重寫,直到5年后。 或者,您有多個應用程序訪問同一個數據庫:Java應用程序,一些Perl腳本,存儲過程等。在這種情況下,數據庫設計是您項目中的優先事項,而jOOQ在這些設置中工作得非常好。從某種意義上說,您不一定要“關心”您的數據庫,而只是想在某個地方“持久化”您的Java域,而這恰好是一個關系數據庫,那么Hibernate也許是一個更好的選擇-至少在項目的早期階段,因為您可以輕松地從Entity模型生成數據庫架構。
當閱讀很復雜時,SQL確實會發光。 當您聯接許多表時,當您在數據庫中聚合數據時,當您進行報告時,當您進行批量讀取和寫入時。 您是從集合論的角度來考慮數據的,例如您的數據整體。 但是,用SQL編寫CRUD很無聊。 這就是為什么jOOQ還為您提供了一個ActiveRecord風格的API來處理無聊的部分(當您在單個表上進行操作時(Jason提到過))。但是,如果您的編寫變得復雜,即您必須加載一個復雜的對象圖,其中包含20個涉及內存的實體,對其進行樂觀鎖定,以多種不同方式對其進行修改,然后再次將其持久保存,那么SQL / jOOQ將無濟于事。 這就是Hibernate最初創建的目的。
意見
我相信數據是永遠的。 您應該*始終*假定數據庫在應用程序中仍然存在。 重寫應用程序(的一部分)比遷移數據庫要容易得多。 擁有一個干凈且設計良好的數據庫架構將始終使項目,特別是復雜項目的收益得到回報。 另請參閱我們先前有關“無模式”數據庫的謬誤的文章 。
而且,大多數項目實際上完成90%的讀取和10%的寫入,寫入通常并不復雜(在事務中修改2-3個表)。 這意味著大多數時候,不需要Hibernate / JPA的一級和二級緩存解決的復雜性。 人們常常會誤解這些功能,而只是關閉緩存,將Hibernate的緩存一直刷新到服務器,從而以錯誤的方式使用Hibernate。
但是,如果您不確定上述兩個決策軸,則可以走中間路線,僅將jOOQ用于報告,批處理等,并將Hibernate用于CRUD –在CQRS(命令查詢責任隔離)中: http://martinfowler.com/bliki/CQRS.html )樣式。 也有很多jOOQ用戶選擇了此路徑。
進一步閱讀
- 吞吐量與復雜性–什么時候應該使用ORM? 由Mike Hadlow
- 為什么要使用ORM? 比爾·卡文(Bill Karwin)
- 是否有充分的理由不使用ORM? 堆棧溢出
- 為什么要使用ORM? 堆棧溢出
翻譯自: https://www.javacodegeeks.com/2015/03/jooq-vs-hibernate-when-to-choose-which.html
jooq
總結
以上是生活随笔為你收集整理的jooq_jOOQ与Hibernate:何时选择哪个的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 循环节是什么 循环节是什么意思
- 下一篇: 家访的目的有哪些 家访的目的是什么
