jOOQ的使用场景

2023-12-12 10:30
文章标签 使用 场景 jooq

本文主要是介绍jOOQ的使用场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jOOQ的使用场景

jOOQ最初是作为一个库完全是JDBC和所有的数据库交互的抽象层而被创建。 在已有的软件产品中经常遇到的各种最佳实践被应用到这个库中。包含如下:

  • 类型安全数据库对象引用,通过自动生成的模式, 表, 列,记录, 存储过程,类型,DAO, POJO(具体可以看代码生成章节)。
  • 类型安全的SQL构造/SQL构建,通过完整的DSL查询API, 建模出SQL在java语言中作为特定领域的语言。 (阅读DSL查询api章节)。
  • SQL方言抽象和SQL子句仿真,以改进跨数据库兼容性,并在更简单的数据库中启用丢失的特性(查看SQL方言章节)
  • 使用jOOQ作为开发过程中不可或缺的一部分进行SQL日志记录和调试。

实际上,jOOQ最初设计的目的是取代除处理连接池之外的任何其他数据库抽象框架。

以你喜欢的方式使用jOOQ

…但是开源是社区驱动的。 社区已经展示了各种不同于最初意图的使用jOOQ的方法。遇到的一些用例是:

  • 使用Hibernate解决70%的查询(即:CRUD),剩下的30%部分使用JOOQ。 这30%确实需要操作SQL
  • 使用jOOQ用于SQL的构建, JDBC用于SQL的执行。
  • 使用jOOQ用于SQL的构建, Spring Data 用于SQL的执行。
  • 使用jOOQ, 而不使用其源码生成器去构建框架基础,用于动态SQL执行。

下面部分解释了在你的应用中,使用jOOQ的各种各样的案例。

jOOQ不使用代码生成器时,作为一个SQL生成器

我们强烈推荐使用jOOQ并使用其代码生成器来充分列用jOOQ的特性!

然后, 如果你拥有一个动态的模式, 则不必使用代码生成器。 这是所有的使用场景中最简单的方式, 允许为任何数据库构建有效的SQL。在这种应用场景中, 你将不必使用jOOQ的代码生成器,甚至可能都没有jOOQ的查询执行工具。相反,您将使用jOOQ的查询DSL API将字符串、文字和其他用户定义的对象包装到一个面向对象的、类型安全的AST中,对SQL语句进行建模。如下给出一个案例:

// Fetch a SQL string from a jOOQ Query in order to manually execute it with another tool.
// For simplicity reasons, we're using the API to construct case-insensitive object references, here.
Query query = create.select(field("BOOK.TITLE"), field("AUTHOR.FIRST_NAME"), field("AUTHOR.LAST_NAME")).from(table("BOOK")).join(table("AUTHOR")).on(field("BOOK.AUTHOR_ID").eq(field("AUTHOR.ID"))).where(field("BOOK.PUBLISHED_IN").eq(1948));String sql = query.getSQL();
List<Object> bindValues = query.getBindValues();

使用jOOQ查询DSL构建的SQL可以直接被JDBC所执行, 使用Spring的JdbcTemplate, 使用Apache DbUtils和很多其他工具(注意, 自从jOOQ缺省使用 java.sql.PreparedStatement, 对于“1987”,将会生成一个绑定变量, 可以阅读绑定变量部分)

你也可以避免单独获取SQL字符串和绑定变量:

String sql = query.getSQL(ParamType.INLINED);

如果您希望仅将jOOQ用作SQL构建器,那么手册的以下部分可能会引起您的兴趣:

  • SQL building: 这部分包含了很多信息关于如何使用jOOQAPI来创建SQL语句
  • 普通SQL: 这一章节中包含了有用的信息, 特别的对于一些开发者,他们想支持表表达式, 列表达式, 即:对jOOQ使用普通SQL, 而不是通过自动生成的一些工具类
  • 绑定值:本节解释如何在jOOQ中管理和/或内联绑定值。

使用代码生成器,用jOOQ作为SQL构建器

除过上述章节中使用独立的SQL构建器, 您还可以使用jOOQ的代码生成特性,以便使用Java编译器针对实际的数据库模式编译SQL语句。这为仅仅使用DSL查询和自定义字符串和文字构造SQL增加了很多功能和表现力,因为您可以确保所有数据库工件实际上存在于数据库中,并且它们的类型是正确的。我们强烈建议使用这种方法。 如下给出了一个例子:

// Fetch a SQL string from a jOOQ Query in order to manually execute it with another tool.
Query query = create.select(BOOK.TITLE, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME).from(BOOK).join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)).where(BOOK.PUBLISHED_IN.eq(1948));
String sql = query.getSQL();
List<Object> bindValues = query.getBindValues();

使用jOOQ查询DSL构建的SQL可以直接被JDBC所执行, 使用Spring的JdbcTemplate, 使用Apache DbUtils和很多其他工具(注意, 自从jOOQ缺省使用 java.sql.PreparedStatement, 对于“1987”,将会生成一个绑定变量, 可以阅读绑定变量部分)

你也可以避免单独获取SQL字符串和绑定变量:

String sql = query.getSQL(ParamType.INLINED);

如果您希望仅将jOOQ用作SQL构建器,那么手册的以下部分可能会引起您的兴趣:

  • SQL building: 这部分包含了很多信息关于如何使用jOOQAPI来创建SQL语句
  • 普通SQL: 这一章节中包含了有用的信息, 特别的对于一些开发者,他们想支持表表达式, 列表达式, 即:对jOOQ使用普通SQL, 而不是通过自动生成的一些工具类
  • 绑定值:本节解释如何在jOOQ中管理和/或内联绑定值。

jOOQ作为一个SQL执行器

除过前面提到的任何工具, 你也可以直接使用jOOQ来执行jOOQ生成的SQL语句。这将在前面讨论用于SQL类型安全构建的的API的基础上增加许多便利,此时可以重用来自自动生成的类,获取记录和自定义数据类型。如下给出一个案例:

// Typesafely execute the SQL statement directly with jOOQ
Result<Record3<String, String, String>> result =
create.select(BOOK.TITLE, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME).from(BOOK).join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)).where(BOOK.PUBLISHED_IN.eq(1948)).fetch();

通过让jOOQ执行SQL, jOOQ查询DSL变成了真正的嵌入式SQL。

不过,jOOQ并不止于此! 您可以使用jOOQ执行任何SQL。换句话说,您可以使用任何其他SQL构建工具并使用jOOQ运行SQL语句。下面是一个例子:

// 使用你喜爱的工具构建sql字符串。
String sql = "SELECT title, first_name, last_name FROM book JOIN author ON book.author_id = author.id " +"WHERE book.published_in = 1984";// 使用jOOQ获取数据
Result<Record> result = create.fetch(sql);
// 或者使用JDBC获取数据。
ResultSet rs = connection.createStatement().executeQuery(sql);
Result<Record> result = create.fetch(rs);

果您希望使用jOOQ作为SQL执行器(或不使用)代码生成,手册的以下部分将对您感兴趣:

  • SQL构建: 本节包含大量关于使用jOOQ API创建SQL语句的信息
  • 代码生成: 本节包含针对开发人员数据库运行jOOQ代码生成器所需的信息
  • SQL执行: 本节包含大量关于使用jOOQ API执行SQL语句的信息
  • 获取: 本节包含一些有用的信息,介绍使用jOOQ获取数据的各种方法

使用SQL做增删改查

除了jOOQ流畅的API用于查询构造之外,jOOQ还可以帮助您执行日常的CRUD操作。下面是一个例子:

// Fetch an author
AuthorRecord author = create.fetchOne(AUTHOR, AUTHOR.ID.eq(1));
// Create a new author, if it doesn't exist yet
if (author == null) {author = create.newRecord(AUTHOR);author.setId(1);author.setFirstName("Dan");author.setLastName("Brown");
}
// Mark the author as a "distinguished" author and store it
author.setDistinguished(1);
// Executes an update on existing authors, or insert on new ones
author.store();

如果您希望使用jOOQ的所有特性,那么您可能会对手册的以下部分感兴趣(包括所有分段):

  • SQL构建: 本节包含大量关于使用jOOQ API创建SQL语句的信息
  • 代码生成: 本节包含针对开发人员数据库运行jOOQ代码生成器所需的信息
  • SQL执行: 本节包含大量关于使用jOOQ API执行SQL语句的信息

jOOQ对于专业人士

jOOQ不仅仅是一个可以帮助您构建和执行SQL的工具以应对你产生的,兼容的模式。jOOQ附带了很多工具。以下是jOOQ附带了很多工具。 这里列举jOOQ附带的非常重要的工具:

  • jOOQ执行监听器: jOOQ允许你挂载你自定义的监听器到jOOQ的SQL语句执行生命周期,以便集中协调对正在执行的SQL执行的任何任意操作。使用这个特性,将其用于日志记录、身份生成、SQL跟踪、性能测量等。
  • 日志: jOOQ内嵌了标准的DEBUG日志输出器, 记录跟进所有你正在执行的SQL语句并获取结果。
  • 存储过程: jOOQ支持存储过程和 你喜爱的任何数据库的方法。 所有例程和用户定义类型都会生成,并且可以包含在jOOQ的SQL构建中。
  • 批量执行: 在执行大量SQL语句时,批处理执行非常重要。与JDBC比较,jOOQ简化了这样的操作。
  • 导出和导入: jOOQ附带的API将很容易的以各种各样的格式导入和导出数据。

如果你是一个你喜爱的功能丰富的数据库的高级用户, jOOQ将帮助您访问数据库供应商的所有特定SQL特性,例如OLAP特性, 存储过程, 用户自定义类型,制造商特定SQL, 函数, 以及更多。 本指南中包含了这些例程。

如下为jOOQ的学习大纲的思维导图:https://www.drawon.cn/template/details/656ac5efc083fb5228fc17f8

这篇关于jOOQ的使用场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484273

相关文章

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地