2017-02-22 123 views
4

在下面jooq片斷,我從online material發現,有一個從「jooq到此結束」過渡到「流開始」jooq和Java 8流SQL生成

這是否意味着SQL查詢生成發生,直到取() ? 然後後來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(");"); 
     } 
    ); 

回答

3

這是否意味着SQL查詢生成發生,直到例子fetch()?後來就事後流()開始,一切都在內存中的Java進程中

或者是Java 8個的活動記錄的DSL和全段流轉換爲SQL查詢,包括流()部分?

沒有

這是因爲我曾經見過sortBy/groupingBy正在做內部的許多在線樣品流時,他們可以在SQL完成以及

你可能例子意思是JINQ library

雖然jOOQ,您可以訪問到Java 8 Stream API(因爲每一個jOOQ結果是,事實上,一個List,你可以調用任何名單上List.stream()),它不流操作轉換爲SQL。儘管像JINQ這樣的庫證明了這是可能的,但原則上,Stream API比SQL語言提供更少的功能,這不符合jOOQ給予用戶完全SQL語言訪問的願景。