繁体   English   中英

jooq和java 8流SQL生成

[英]jooq and java 8 streams SQL generation

在我从在线资料中找到的下面的jooq片段中,有一个从“jooq ends here”到“stream starts”的过渡

这是否意味着SQL查询生成发生在fetch()之前? 后来在stream()启动之后,一切都在java进程的内存中

或者java 8流如活动记录DSL和整个片段是否转换为SQL查询,包括stream()部分?

这是因为我已经看到了在许多在线样本的流内部完成sortBy / groupingBy的例子,当它们也可以在SQL中完成时

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(");");
       }
   );

这是否意味着SQL查询生成发生在fetch()之前? 后来在stream()启动之后,一切都在java进程的内存中

或者java 8流如活动记录DSL和整个片段是否转换为SQL查询,包括stream()部分?

没有

这是因为我已经看到了在许多在线样本的流内部完成sortBy / groupingBy的例子,当它们也可以在SQL中完成时

你可能意味着JINQ库

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM