溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

jOOQ項(xiàng)目存在的原因是什么

發(fā)布時(shí)間:2021-09-18 17:39:57 來(lái)源:億速云 閱讀:134 作者:柒染 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)jOOQ項(xiàng)目存在的原因是什么,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

值得思考的是,為什么你應(yīng)該(或者不應(yīng)該)在某特定項(xiàng)目中使用JOOQ。具體講,你可能正要從jOOQ  和JPA,或者jOOQ和Hibernate,或者jOOQ和QueryDSL、或者jOOQ和SLICK(對(duì)Scala而言)的兩者之中選擇其一。這里給出一些指導(dǎo)原則(當(dāng)然會(huì)稍微有點(diǎn)偏向JOOQ):

jOOQ存在的理由 —— 同JPA相比

Java和SQL在一起使用已經(jīng)有很久了。SQL是一種很“古老”但很完備的技術(shù),大家對(duì)它的理解也已很透徹。雖然在Java的運(yùn)行平臺(tái)JVM之上也能建立一些新式的當(dāng)代語(yǔ)言,但Java語(yǔ)言可也不算新了。然后,經(jīng)過(guò)了這么多年,處理SQL和Java二者之間接口的庫(kù)(Library)不斷變來(lái)變?nèi)?,只留下了JPA這個(gè)大家勉強(qiáng)在半信半疑中接受的一個(gè)標(biāo)準(zhǔn),  幾乎沒(méi)留下任何別的選項(xiàng)。

迄今為止,能夠真正把SQL看做編程語(yǔ)言當(dāng)中具有首要地位的數(shù)據(jù)庫(kù)抽象框架或庫(kù),少之又少。包括業(yè)界標(biāo)準(zhǔn)JPA,  EJB、Hibernate、JDO、Criteria  Query以及其它很多在內(nèi)的框架,為將SQL的使用范圍縮減到最小采用了JPQL、HQL、JDOQL以及其它各種各樣的低級(jí)查詢語(yǔ)言,它們都是在企圖隱藏SQL本身。

jOOQ來(lái)填補(bǔ)這一空白。

jOOQ存在的理由 —— 同LINQ相比

為了更好地將查詢作為一個(gè)概念集成到編程語(yǔ)言當(dāng)中,其它的平臺(tái)采用了LINQ (同LINQ-to-SQL一起),  Scala用的是SLICK,Java也采用了QueryDSL。通過(guò)查詢,它們可以理解對(duì)任意目標(biāo)的查詢,這些目標(biāo)可以是SQL、XML、集合(Collection)以及其它的異構(gòu)數(shù)據(jù)存儲(chǔ)(Data  Store)。JOOQ斷言,這樣也是走錯(cuò)了方向。

在比較高級(jí)的查詢用例中(比簡(jiǎn)單的CRUD和少量的多表查詢高級(jí)),人們還是希望能夠從SQL較強(qiáng)的表達(dá)能力中獲益。SQL本身的關(guān)系型特質(zhì),使得它和C#、Scala或者Java等等這類面向?qū)ο笳Z(yǔ)言和非完全函數(shù)式編程語(yǔ)言能夠做到的事情相比,差別巨大。

要用形式化的方式表達(dá)和驗(yàn)證它們產(chǎn)生的多表查詢和臨時(shí)表(ad-hoc)的表達(dá)式的類型非常困難。要想支持類似數(shù)據(jù)透視表(Pivot  Table)、非巢套式游標(biāo)(Unnested  Cursor)或者僅僅是從派生表中進(jìn)行任意投射(Projection)等等這樣高級(jí)的表表達(dá)式,那就更加是難上加難了。如何在非常強(qiáng)的面向?qū)ο箢愋湍P椭袑?shí)現(xiàn)這些特性,不太可能會(huì)在考慮范圍之內(nèi)。

本質(zhì)上講,  決定創(chuàng)建看上去跟SQL或者C#或者Scala、Java很像的API,就是一種確定無(wú)疑的或者偏向這個(gè)或者偏向那個(gè)平臺(tái)的決定。盡管讓SLICK以和LINQ(或者Java世界里的QueryDSL)類似的方式進(jìn)行演進(jìn)比較容易,  但是隨后,用以清晰表達(dá)其背后意圖的SQL特性范圍(Feature  Scope)就很難再添加進(jìn)來(lái)了(比如,你怎么來(lái)對(duì)Oracle的分區(qū)外聯(lián)語(yǔ)法進(jìn)行建模?如何對(duì)ANSI/ISO SQL:1999中的分組集(Grouping  Set)進(jìn)行建模?怎樣才能支持標(biāo)量子查詢緩存?等等問(wèn)題)。

jOOQ來(lái)填補(bǔ)這個(gè)空白。

jOOQ很不同

SQL從來(lái)就不是一種抽象的語(yǔ)言。它不局限在重量級(jí)的映射器這樣狹小的范圍之內(nèi),也不隱藏關(guān)系型數(shù)據(jù)的美以及簡(jiǎn)單性。SQL一直都不面向?qū)ο蟆QL從來(lái)就不是SQL之外的任何其它東西!

以上就是jOOQ項(xiàng)目存在的原因是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI