在我从在线材料中找到的jooq代码段中,有一个从"jooq终结于这里“到”流开始“的转换。
这是否意味着SQL查询生成一直到fetch()?稍后流()启动后,所有东西都在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(");");
}
);发布于 2017-02-22 12:55:37
这是否意味着SQL查询生成一直到fetch()?稍后流()启动后,所有东西都在java进程中的内存中。
是
还是将java 8流(如活动记录DSL和整个代码段)转换为SQL查询(包括stream()部件)?
不是
这是因为我在许多在线示例中看到了在流中执行sortBy / groupingBy的示例,而这些示例也可以在SQL中完成。
你可能指的是JINQ库。
虽然jOOQ允许您访问Java8 Stream API (因为每个jOOQ结果实际上都是一个List,并且您可以在任何列表上调用List.stream() ),但它不会将流操作转换为List。虽然像JINQ这样的库证明了这是可能的,但原则上,Stream API提供的功能比SQL少得多,这不符合jOOQ为用户提供完整的SQL访问权限的愿景。
https://stackoverflow.com/questions/42385997
复制相似问题