![](/img/trans.png)
[英]How to consume java Map<String,Object> to generate insert and update sql queries in JOOQ (without code generation)?
[英]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.