JOOQ优于JDBC +测试有什么优势?
在JDBC中,您可以直接在代码中编写SQL查询,使用JOOQ我们调用方法,因此JOOQ默认情况下更慢。
在JOOQ中更难犯错误但并非不可能。这个错误可以在测试中捕获,使用JOOQ你也应该编写这些测试,因此,JOOQ没有优势。
答案 0 :(得分:9)
我完全同意你的看法。无论你是否使用动态语言,最好还是进行测试。 (SQL作为外部DSL,例如JDBC)或"静态语言" (SQL作为内部DSL,例如jOOQ)
你似乎只抓住了jOOQ可以为你做的事情。当然,类型安全,嵌入式SQL是一个很棒的功能,但是一旦你拥有它,你就可以免费获得(列表远非详尽无遗):
INSERT
,UPDATE
,DELETE
语句。 jOOQ' s UpdatableRecord
大大简化了这一点,同时提供了以下内容:
LIMIT
clause中看到 - 这是SQL最难标准化的条款之一ExecuteListener
的简单SPI,它允许您挂钩各种JDBC交互步骤,包括:
VisitListener
SPI允许您在查询表达式树中的任意位置拦截SQL生成。这可能非常有用,例如实现row level security等强大的功能。当然,您可以免费获得您提到的编译时类型安全性(以及IDE自动完成)。如果你不想全力投入jOOQ提供的内部DSL,你仍然可以使用plain SQL,然后以非类型安全的方式使用jOOQ的API(仍然有很多功能):
// Just one example: CSV exports
String csvExport =
ctx.fetch("SELECT * FROM my_table WHERE id = ?", 3)
.formatCSV();
(当然,这个答案在我为jOOQ背后的公司工作时有偏见)