【问题标题】:jooq and java 8 streams SQL generationjooq 和 java 8 流 SQL 生成
【发布时间】:2017-07-12 04:16:33
【问题描述】:

在我从online material 找到的 jooq sn-p 下面,有一个从“jooq 在这里结束”到“流开始”的过渡

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

或者是像活动记录DSL这样的java 8流和整个sn-p被转换成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(");");
       }
   );

【问题讨论】:

    标签: java sql java-8 java-stream jooq


    【解决方案1】:

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

    是的

    或者是像活动记录 DSL 这样的 java 8 流和整个 sn-p 被转换为 SQL 查询,包括 stream() 部分?

    没有

    这是因为我在许多在线示例中看到了 sortBy / groupingBy 在流内部完成的示例,而它们也可以在 SQL 中完成

    您可能是指JINQ library

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

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 2019-11-02
      • 2014-03-06
      • 2020-07-26
      • 2021-04-28
      • 2016-07-22
      • 1970-01-01
      • 2014-11-28
      • 2019-01-08
      相关资源
      最近更新 更多