【发布时间】:2020-09-20 10:47:44
【问题描述】:
据我所知,MyBatis 和 jOOQ 用于类似的情况。所以我想知道什么时候应该在 Spring 应用程序中使用 jOOQ 而不是 MyBatis,以及每个库和框架在开发时带来的技术优缺点。
如果有人已经精通使用 MyBatis 之类的框架编写 SQL 查询,那么切换到 jOOQ 会给他们带来哪些技术优势(查询运行时、编译时错误)?
【问题讨论】:
标签: java spring database mybatis jooq
据我所知,MyBatis 和 jOOQ 用于类似的情况。所以我想知道什么时候应该在 Spring 应用程序中使用 jOOQ 而不是 MyBatis,以及每个库和框架在开发时带来的技术优缺点。
如果有人已经精通使用 MyBatis 之类的框架编写 SQL 查询,那么切换到 jOOQ 会给他们带来哪些技术优势(查询运行时、编译时错误)?
【问题讨论】:
标签: java spring database mybatis jooq
据我了解,MyBatis 的产品愿景是提供一种在 SQL 语言之上使用其 XML 语法实现模板的方法。目标是将 SQL 保留在外部文件中的 Java 逻辑之外(可以在运行时替换,例如为查询添加提示),并使用本机 SQL。 (jOOQ can do that as well,但它不是宣传最多的功能)。使用纯 SQL 的优势显然是能够直接在数据库客户端中运行 SQL,就像视图或存储过程一样。
jOOQ 的产品愿景是通过将 SQL 实现为 Java API 并通过代码生成提供对数据库模式的类型安全访问,从而提供类型安全、嵌入式、动态 SQL。这里的重点是使您的 SQL 逻辑成为 Java 逻辑的部分,因为这将导致更好的类型安全性,从而提高质量。这样做的副作用是vendor agnosticity(您的 SQL 将在许多方言上运行),并且非常简单dynamic SQL。如果您有任何这些要求,那么选择很容易。
以上是各个产品的主要愿景,它们会影响人们对它们的看法,但这并不妨碍这两种产品具有可以帮助您完成日常任务的附加功能。我不太了解 MyBatis - 最近它似乎在 dynamic SQL 的内部 DSL 上有所改进,就像 jOOQ 可用于偶尔的模板一样。一组sub-products in MyBatis can be seen here。
一些鲜为人知的 jOOQ 功能可能会或可能不会立即用于您的日常工作,包括:
(免责声明:我为 jOOQ 背后的公司工作)
【讨论】: