当前位置: 首页 > 知识库问答 >
问题:

jooq和Java8流SQL生成

郁景龙
2023-03-14

在我从在线材料中找到的以下jooq片段中,有一个从“jooq结束于此”到“流开始”的转换

这是否意味着SQL查询生成发生,直到取得()?之后stream()启动,一切都在java进程内存中

或者像active record DSL这样的java 8流和整个代码段是否转换为SQL查询,包括stream()部分?

这是因为我已经看到了示例,其中sortBy/group pingBy是在许多在线示例的流中完成的,而它们也可以在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(");");
       }
   );

共有1个答案

崔宜修
2023-03-14

这是否意味着SQL查询生成发生,直到取得()?之后stream()启动,一切都在java进程内存中

或者像active record DSL这样的java 8流和整个代码段是否转换为SQL查询,包括stream()部分?

这是因为我已经看到了示例,其中sortBy/group pingBy是在许多在线示例的流中完成的,而它们也可以在SQL中完成

你可能是说JINQ图书馆。

而jOOQ允许您访问Java8StreamAPI(因为每个jOOQ结果实际上都是一个List,并且您可以在任何列表上调用List.stream()),它不会将流操作转换为SQL。虽然像JINQ这样的库证明了这是可能的,但原则上,StreamAPI提供的功能比SQL语言少得多,这不符合jOOQ为用户提供完全SQL语言访问的愿景。

 类似资料:
  • 我试图使用JOOQ连接到HSQLDB,但我失败了,这里是错误消息: 此查询也会在HSQLDB Manager上失败(与JOOQ代码生成器的错误相同): 此查询工作正常: 我认为问题出在“cc”限定符上(在查询返回的“CONSTRAINT_NAME”字段上),这是HSQLDB错误吗? 我正在使用: HSQLDB 2.3.1 JOOQ 3.2.3 谢谢Ciccio

  • 我想得到以下数据结构:Map 给定的是一个包含字段als原语(位置、目标、距离)或作为键(位置)加映射(目标)的类。从每个独特的位置,一个人可以瞄准多个目的地(按距离)。 关于第二个代码段:结果应该与第一个代码中的结果相同。唯一的区别是,LocationPair中提供的数据已被进一步处理,因此目的地和距离已被放入其目标地图中。 我知道这一定是可能的,但不知何故,我无法弄清楚如何完成它。上面的流代码

  • 我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢

  • MySQL不接受此处生成的datetime值。我探索并发现jOOQ转换器可以用于自定义转换。我可以找到如何在获取数据时使用转换的示例,但无法弄清楚如何在查询时使用转换器。如何使用jOOQ转换器生成SQL而不生成代码?或者是否有更好的方法为SQL生成此查询。

  • 我的项目需要我自己生成DAO和POJO。必须对其进行某些修改。我的SRS说我必须使用jOOQ。我第一次使用它;我知道jOOQ自己生成POJO和DAO,但我找不到禁用它的方法。 我在jOOQ的文档中找不到任何对我有帮助的东西。有人能告诉我如何从DAO和POJO代禁用jOOQ,但仍然提供记录吗。 Maven pom。xml文件如下: 而且构建使用了gradle。我也不知道这会对更改产生什么影响。