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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

将Java EE与jOOQ结合使用的初学者指南

發布時間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将Java EE与jOOQ结合使用的初学者指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java EE附帶了自己的持久性API:JPA。 當您想要將RDBMS實體(表/關系)映射到Java實體(類)時,JPA最強大,主要遵循1:1映射策略。 其背后的想法是,業務邏輯通常并不像關系代數或SQL那樣真正面向集合,而是面向記錄的,這意味著將業務規則和業務邏輯應用于單個記錄。

換句話說,當SQL和關系代數與值(元組)有關時,JPA與(單個記錄的)身份和狀態有關。 這就是JPA的亮點,因為:

壽命太短,無法使用SQL編寫CRUD

但是正如加文·金(Gavin King)經常說的那樣:

RDBMS不僅僅與CRUD有關

加文·金(Gavin King)在開始研究最流行的JPA實現Hibernate時就已經意識到了OLAP的炒作。 商業智能或當今稱為數據科學的技術比簡單的CRUD依賴更高級的功能-簡單的JPA規范或其實現從未將其作為目標。

實際上,您不必一定要執行OLAP才能從本機SQL中受益,在更普通的OLTP環境中也會出現更簡單的用例,例如

  • 報告中
  • 批量和批量數據處理
  • 查詢復雜的業務規則

盡管JPA提供了JPQL和Criteria API,這將幫助您在查詢中表達一定數量的復雜性,但最終您將受到這些語言和API提供的功能的限制,正如Michael Simons最近在有趣的Criteria API與jOOQ比較中所記錄的那樣 。

因此,所有JPA實現都提供了一種使用“本地SQL”查詢數據庫的方法。 在先前的博客文章中,我們展示了如何利用jOOQ的類型安全DSL API通過JPA的本機查詢API運行SQL查詢 ,然后獲取結果……

  • ……作為管理實體
  • …作為使用SqlResultSetMapping映射的DTO

在上述情況下,jOOQ僅用作SQL查詢構建器 ,而查詢執行則留給JPA。

在Java EE中使用jOOQ進行所有數據庫查詢

記住jOOQ的理念 :

jOOQ本質上是類型安全的JDBC。 而已。

即使可以使用JPA執行本機SQL,也不必這樣做。 您可以直接在JDBC級別上進行操作,這是JPA經常需要執行的操作,例如在工作時…

  • ……具有特定于供應商的數據類型
  • ……使用非平凡的存儲過程
  • …與語句批處理
  • …帶有可更新的游標

在應用程序服務器上運行應用程序時,可以選擇所需和需要的功能,其余部分則使用專有的API(例如在JDBC之上運行的jOOQ)。 例如,您可以使用:

  • 用于會話和范圍管理的EJB
  • CDI用于依賴項注入
  • jOOQ與您的數據庫交互

(您也可以將JTA添加到堆棧中-為簡單起見,我們暫時將其跳過)

該過程很簡單:只需使用CDI將javax.sql.DataSource注入到會話bean中即可:

@Stateless public class LibraryEJB {@Resource(lookup="java:data-source-configuration")private DataSource ds; }

…并開始使用JDBC進行操作:

public List<Author> fetchAuthors() throws SQLException {List<Author> result = new ArrayList<>();// Get a Connection from the injected DataSourcetry(Connection con = ds.getConnection();PreparedStatement stmt = con.prepareStatement("SELECT * FROM AUTHOR ORDER BY ID");ResultSet rs = stmt.executeQuery()) {result.add(new Author(rs.getInt("ID"),rs.getString("FIRST_NAME"),rs.getString("LAST_NAME")));}return result; }

…或使用jOOQ:

public Result<AuthorRecord> fetchAuthors() {// Pass the injected DataSource to jOOQreturn DSL.using(ds, H2).selectFrom(AUTHOR).orderBy(AUTHOR.ID).fetch(); }

請注意,jOOQ (默認情況下)如何將所有結果急切地獲取到內存中 ,并急切地關閉諸如JDBC Connection , PreparedStatement和ResultSet類的資源,這樣就無需您自己去處理資源管理的麻煩。

再次:

jOOQ本質上是類型安全的JDBC。 而已。

出于各種原因,JDBC一直是Java EE應用程序的重要組成部分,包括對供應商特定功能的訪問。 jOOQ在JDBC的基礎上增加了編譯時類型的安全性。 而已。 與JDBC兼容的任何東西都可以與jOOQ兼容。

特別是,無論您做出何種選擇,jOOQ都不會干擾您的事務或會話模型。 jOOQ所需要的只是一個JDBC Connection或DataSource 。

在JBoss WildFly中運行示例

例如,可以從GitHub檢出以上示例,然后直接在WildFly中運行-或在其他Java EE應用程序服務器中進行少量修改即可: https : //github.com/jOOQ/jOOQ/tree/master/jOOQ-examples / jOOQ-javaee-example

該示例是在Arun Gupta的網絡研討會中為WildFly創建的。 網絡研討會回答以下問題:

  • 什么是jOOQ?
  • 有JDBC和JPA時為什么要使用JOOQ?
  • 它如何與Java EE應用程序配合? 它使用底層的JPA持久性提供程序還是其他一些連接?
  • 通過JPA的利弊? 純冬眠?
  • 它的縮放程度如何?
  • 在Java EE應用程序中顯示代碼示例
  • jOOQ用于基于CRUD或領域豐富的應用程序?
  • 最終如何將jOOQ中的所有工作整合到JPA中并進行標準化? 還是更多的JDBC?

完整的網絡研討會可以在YouTube上找到,網址為:

翻譯自: https://www.javacodegeeks.com/2015/10/a-beginners-guide-to-using-java-ee-with-jooq.html

總結

以上是生活随笔為你收集整理的将Java EE与jOOQ结合使用的初学者指南的全部內容,希望文章能夠幫你解決所遇到的問題。

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