在jOOQ中获取数据的多种不同方式

本文详细介绍了在jOOQ中获取数据的各种方式,包括可迭代获取、单一记录获取、资源性获取、功能性获取、采集器获取、反应式获取和多结果集获取。文章强调了jOOQ API的便利性和开发者体验,提供了多种处理SQL查询结果的类型安全方法。
摘要由CSDN通过智能技术生成

jOOQ的API是关于方便的,因此,像 fetch() 这样的重要操作(最重要的操作?)也必须附带方便。获取数据的默认方式是这样的:

Result<Record1<String>> result =
ctx.select(BOOK.TITLE)
   .from(BOOK)
   .fetch();

for (Record1<String> record : result) {
    // ...
}
复制代码

它将整个结果集取到内存中,并急切地关闭底层的JDBC资源。但是我们还有什么其他的选择呢?

可迭代的获取方式

在上面的例子中, fetch() 的调用并不是严格意义上的必要。 [ResultQuery<R>](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/ResultQuery.html) 类型 方便地扩展了 Iterable<R> , 这意味着对 ResultQuery.iterator() 的调用也将执行该查询。这主要可以通过两种方式实现。

外部迭代

for (Record1<String> record : ctx
    .select(BOOK.TITLE)
    .from(BOOK)
) {
    // ...
}
复制代码

这特别好,因为它感觉就像PL/SQL或PL/pgSQL的 FOR 循环,用于隐式游标:

FOR rec IN (SELECT book.title FROM book) LOOP
  -- ...
END LOOP;
复制代码

不过这仍然要把整个结果集取到内存中,因为在Java中没有一个 for-with-resources 语法,它把 foreach 语法和 try-with-resources 语法结合起来。

内部迭代

JDK 8增加了 Iterable::forEach ,jOOQ的 [ResultQuery](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/ResultQuery.html) 继承了,所以你也可以这样做。

ctx.select(BOOK.TITLE)
   .from(BOOK)
   .forEach(record -> {
       // ...
   });
复制代码

两者是完全等价的。

单一记录的获取

如果你确定你只取一个单一的值,不需要具体化一个列表。只需使用以下方法之一。鉴于这个查询:

ResultQuery<Record1<String>> query = ctx
    .select(BOOK.TITLE)
    .from(BOOK)
    .where(BOOK.ID.eq(1));
复制代码

你现在可以

取一个可空的记录

这就获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值