日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jOOQ与Hibernate:何时选择哪个

發布時間:2023/12/3 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jOOQ与Hibernate:何时选择哪个 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hibernate已成為Java生態系統中的事實上的標準,事實上, 如果標準對您很重要 ,并且如果您將JCP與ISO,ANSI,IEEE等置于同一級別,那么Hibernate也是實際的JavaEE標準實現。

本文的目的不是討論標準,而是討論愿景。 Hibernate贊同JPA對ORM的看法。 jOOQ擁有SQL強大查詢的愿景,因此,為了爭辯,讓我們像jOOQ / JDBC / SQL一樣互換使用Hibernate / JPA / ORM。

為什么現在不應該使用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,該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与Hibernate:何时选择哪个的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。