[英]How can jOOQ be used to deal with multiple database engine depending on configuration
我是一個經驗豐富且快樂的 jOOQ 用戶。
我現在正在開發一個需要支持多個數據庫引擎的項目(至少 PostgreSQL、MySQL、Oracle)。
我們想要足夠低級別的東西來控制我們的查詢。 JPA/Hibernate 對我們來說太高級了。
我知道 jOOQ 使用元模型,並且該元模型是從數據庫模式生成的。
有沒有辦法針對不同的數據庫引擎重用相同的 jOOQ 查詢定義(具有相同的模式,除了引擎特定的差異)?
如果我們需要在必要時重新編譯 java 類,那很好。 編譯時配置對我們來說很好。
jOOQ 就是為此而設計的。 你需要做這些事情:
SQLDialect
的Configuration
。 那是容易的部分。 該Configuration
將為您的所有 jOOQ 查詢自動生成特定於供應商的 SQL。 這可以在運行時完成。 無需任何編譯時間調整。@Support({ MYSQL, ORACLE, POSTGRES })
注釋的 jOOQ API。 例如,不能使用DSL.toDate()
,因為它不支持 MySQL,但可以使用DSL.trunc()
,因為所有 3 個目標方言都存在。 我們也越來越多地在 jOOQ 手冊中添加方言特定信息,例如SHL()
function :
-- ASE, HSQLDB, SQLDATAWAREHOUSE, SQLSERVER, SYBASE
(1 * CAST(power(2, 4) AS int))
-- AURORA_MYSQL, AURORA_POSTGRES, COCKROACHDB, CUBRID, MARIADB, MEMSQL, MYSQL, POSTGRES, SQLITE, VERTICA
(1 << 4)
-- DB2, INFORMIX
(1 * CAST(power(2, 4) AS integer))
-- FIREBIRD
bin_shl(1, 4)
-- H2
lshift(1, 4)
-- ORACLE
(1 * CAST(power(2, 4) AS number(10)))
-- TERADATA
shiftleft(1, 4)
-- ACCESS, DERBY, HANA, INGRES, REDSHIFT
/* UNSUPPORTED */
為了確保您不會意外編寫不適用於某些方言的查詢,您可以:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.