首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jooq和java 8流SQL生成

jooq和java 8流SQL生成
EN

Stack Overflow用户
提问于 2017-02-22 08:14:51
回答 1查看 859关注 0票数 5

在我从在线材料中找到的jooq代码段中,有一个从"jooq终结于这里“到”流开始“的转换。

这是否意味着SQL查询生成一直到fetch()?稍后流()启动后,所有东西都在java进程中的内存中。

还是将java 8流(如活动记录DSL和整个代码段)转换为SQL查询(包括stream()部件)?

这是因为我在许多在线示例中看到了在流中执行sortBy / groupingBy的示例,而这些示例也可以在SQL中完成。

代码语言:javascript
复制
DSL.using(c)
   .select(
       COLUMNS.TABLE_NAME,
       COLUMNS.COLUMN_NAME,
       COLUMNS.TYPE_NAME
   )
   .from(COLUMNS)
   .orderBy(
       COLUMNS.TABLE_CATALOG,
       COLUMNS.TABLE_SCHEMA,
       COLUMNS.TABLE_NAME,
       COLUMNS.ORDINAL_POSITION
   )
   .fetch()  // jOOQ ends here
   .stream() // Streams start here
   .collect(groupingBy(
       r -> r.getValue(COLUMNS.TABLE_NAME),
       LinkedHashMap::new,
       mapping(
           r -> new Column(
               r.getValue(COLUMNS.COLUMN_NAME),
               r.getValue(COLUMNS.TYPE_NAME)
           ),
           toList()
       )
   ))
   .forEach(
       (table, columns) -> {
            // Just emit a CREATE TABLE statement
            System.out.println(
                "CREATE TABLE " + table + " (");

            // Map each "Column" type into a String
            // containing the column specification,
            // and join them using comma and
            // newline. Done!
            System.out.println(
                columns.stream()
                       .map(col -> "  " + col.name +
                                    " " + col.type)
                       .collect(Collectors.joining(",\n"))
            );

           System.out.println(");");
       }
   );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 12:55:37

这是否意味着SQL查询生成一直到fetch()?稍后流()启动后,所有东西都在java进程中的内存中。

还是将java 8流(如活动记录DSL和整个代码段)转换为SQL查询(包括stream()部件)?

不是

这是因为我在许多在线示例中看到了在流中执行sortBy / groupingBy的示例,而这些示例也可以在SQL中完成。

你可能指的是JINQ库

虽然jOOQ允许您访问Java8 Stream API (因为每个jOOQ结果实际上都是一个List,并且您可以在任何列表上调用List.stream() ),但它不会将流操作转换为List。虽然像JINQ这样的库证明了这是可能的,但原则上,Stream API提供的功能比SQL少得多,这不符合jOOQ为用户提供完整的SQL访问权限的愿景。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42385997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档