MyBatis 和 jOOQ 的不同用例和技术差异
Different use cases and the technical difference and between MyBatis and jOOQ
据我所知,MyBatis 和 jOOQ 用于类似的情况。所以我想知道什么时候应该在 Spring 应用程序中使用 jOOQ 而不是 MyBatis 以及每个库和框架在开发时带来的技术优缺点。
如果有人已经精通使用像 MyBatis 这样的框架编写 SQL 查询,那么切换到 jOOQ 会给他们带来什么技术优势(查询运行时、编译时错误)?
产品愿景
MyBatis 的产品愿景,据我所知,是提供一种在 SQL 语言之上使用其 XML 语法实现模板的方法。目标是将 SQL 保留在外部文件中的 Java 逻辑之外(可以在 运行 时替换,例如向您的查询添加提示),并使用原生 SQL。 (jOOQ can do that as well,但这不是宣传最多的功能)。使用普通 SQL 的优势显然是能够 运行 您的 SQL 直接在数据库客户端中,就像视图或存储过程一样。
jOOQ 的产品愿景是通过将 SQL 实现为 Java API 来提供类型安全的、嵌入式的、动态的 SQL,并通过代码生成提供类型安全的访问您的数据库架构。这里的重点是使您的 SQL 逻辑成为 Java 逻辑的 部分 ,因为这将带来更好的类型安全性,从而提高质量。其副作用是 vendor agnosticity (your SQL will run on many dialects), and very easy dynamic SQL。如果你有这些需求,选择就很简单
产品的其他特点
以上是各个产品的主要愿景,这会影响人们对它们的看法,但这并不妨碍任何一个产品具有可能有助于您完成日常任务的附加功能。我不太了解 MyBatis - 它似乎确实在 dynamic SQL recently, just like jOOQ can be used for occasional templating. A set of sub-products in MyBatis can be seen here.
的内部 DSL 上有所改进
一些鲜为人知的 jOOQ 功能可能会或可能不会立即用于您的日常工作,包括:
- 一组丰富的 SPIs and settings that help control the details of how your generated SQL is produced, including things like identifier qualification (useful for multi tenancy), quoting,还有更多
- DDL statement support
- Procedural language support,以允许 运行 服务器上的动态命令逻辑
- Support for a lot of functions
- XML and JSON support,这在从数据库中导出分层数据时非常有用
- 数据export and importAPIs
- 一个SQL parser (see also the translator)
- 一个schema comparison utility (see also here)
- 一个 SQL interpreter 可用于对 SQL 脚本进行逆向工程并以编程方式自省其元信息
(免责声明:我在 jOOQ 背后的公司工作)
据我所知,MyBatis 和 jOOQ 用于类似的情况。所以我想知道什么时候应该在 Spring 应用程序中使用 jOOQ 而不是 MyBatis 以及每个库和框架在开发时带来的技术优缺点。
如果有人已经精通使用像 MyBatis 这样的框架编写 SQL 查询,那么切换到 jOOQ 会给他们带来什么技术优势(查询运行时、编译时错误)?
产品愿景
MyBatis 的产品愿景,据我所知,是提供一种在 SQL 语言之上使用其 XML 语法实现模板的方法。目标是将 SQL 保留在外部文件中的 Java 逻辑之外(可以在 运行 时替换,例如向您的查询添加提示),并使用原生 SQL。 (jOOQ can do that as well,但这不是宣传最多的功能)。使用普通 SQL 的优势显然是能够 运行 您的 SQL 直接在数据库客户端中,就像视图或存储过程一样。
jOOQ 的产品愿景是通过将 SQL 实现为 Java API 来提供类型安全的、嵌入式的、动态的 SQL,并通过代码生成提供类型安全的访问您的数据库架构。这里的重点是使您的 SQL 逻辑成为 Java 逻辑的 部分 ,因为这将带来更好的类型安全性,从而提高质量。其副作用是 vendor agnosticity (your SQL will run on many dialects), and very easy dynamic SQL。如果你有这些需求,选择就很简单
产品的其他特点
以上是各个产品的主要愿景,这会影响人们对它们的看法,但这并不妨碍任何一个产品具有可能有助于您完成日常任务的附加功能。我不太了解 MyBatis - 它似乎确实在 dynamic SQL recently, just like jOOQ can be used for occasional templating. A set of sub-products in MyBatis can be seen here.
的内部 DSL 上有所改进一些鲜为人知的 jOOQ 功能可能会或可能不会立即用于您的日常工作,包括:
- 一组丰富的 SPIs and settings that help control the details of how your generated SQL is produced, including things like identifier qualification (useful for multi tenancy), quoting,还有更多
- DDL statement support
- Procedural language support,以允许 运行 服务器上的动态命令逻辑
- Support for a lot of functions
- XML and JSON support,这在从数据库中导出分层数据时非常有用
- 数据export and importAPIs
- 一个SQL parser (see also the translator)
- 一个schema comparison utility (see also here)
- 一个 SQL interpreter 可用于对 SQL 脚本进行逆向工程并以编程方式自省其元信息
(免责声明:我在 jOOQ 背后的公司工作)