2017-02-22 3 views
4

내가 online material에서 발견 조각은() "jooq은 여기서 끝"에서 전환이 jooq 및 자바 8 개 스트림 SQL 생성 아래 jooq에서

이 SQL 쿼리 생성을 가져 오기까지 발생 뜻 "스트림의 시작"에있다 ? 나중에 스트림()이 시작되면 모든 것이 Java 프로세스 내부의 메모리에 있습니다.

활성 레코드 DSL과 같은 Java 8 스트림이고 전체 스 니펫은 stream() 부분을 포함하여 SQL 쿼리로 변환됩니까? 내가 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()? 그리고 나중에 나중에 시작) (스트리밍, 모든 자바 프로세스 내에서 메모리에

예 활성 기록 DSL 및 전체 조각 같은

되거나 자바 8 개 스트림 스트림을 포함하여 SQL 쿼리로 변환() 부품?

없음

내가 sortBy/groupingBy 안에 완료 그들은뿐만 아니라 SQL에 아마

당신을 수행 할 수 있습니다 때 많은 온라인 샘플 스트림되고있는 사례를 본 때문이다 JINQ library을 의미합니다. jOOQ 당신이 자바 8 Stream API (모든 jOOQ 결과이기 때문에하는 List 사실, 당신은 어떤 목록 List.stream()를 호출 할 수 있습니다)에 대한 액세스를 제공하는 동안

, 그것은 SQL에 스트림 작업을 번역하지 않습니다. JINQ와 같은 라이브러리는 이것이 가능하다는 것을 증명하지만, 원칙적으로 Stream API는 의 많은 기능을 SQL 언어보다 덜 제공합니다. 이는 사용자에게 완전한 SQL 언어 액세스 권한을 부여하는 비전에 부합하지 않습니다.