据我了解,MyBatis 的产品愿景是提供一种使用 XML 语法在 SQL 语言之上实现模板的方法。目标是将 SQL 保留在外部文件中的 Java 逻辑之外(可以在运行时替换,例如向查询添加提示),并使用本机 SQL。(jOOQ 也可以做到这一点,但这不是最广为人知的功能)。使用纯 SQL 的优点显然是能够直接在数据库客户端中运行 SQL,就像使用视图或存储过程一样。
jOOQ 的产品愿景是通过将 SQL 实现为 Java API 来提供类型安全、嵌入式、动态 SQL,并通过代码生成提供对数据库模式的类型安全访问。这里的要点是让 SQL 逻辑成为Java 逻辑的一部分,因为这将带来更好的类型安全性,从而提高质量。这样做的副作用是供应商不可知(您的 SQL 将在许多方言上运行),以及非常简单的动态 SQL。如果您有任何这些要求,那么选择就很容易。
以上是各个产品的主要愿景,它们会影响人们对它们的看法,但这并不妨碍这两种产品都具有可以帮助您完成日常任务的附加功能。我不太了解 MyBatis - 最近它似乎在动态 SQL的内部 DSL 上有所改进,就像 jOOQ 可以用于偶尔的模板一样。MyBatis 中的一组子产品可以在这里看到。
一些鲜为人知的 jOOQ 功能可能会或可能不会立即用于您的日常工作,包括:
(免责声明:我在 jOOQ 背后的公司工作)