簡體   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