链接和编写Jooq命令

时间:2017-03-17 10:25:21

标签: java mysql sql jooq

我有这样的查询:

  1. 选择一行
  2. 使用上面一行中的值创建行(还有1个值)。
  3. 从技术上讲,可以在一个SQL请求中表达,但是 使用jooq,应用程序和数据库服务器之间将有一个值往返。

    jooq.select(TABLE_A.FIELD_A, TABLE_A.FIELD_B).from(TABLE_A)                
                .where(TABLE_A.ID.eq(id))
                .fetchOne().map(r ->
                jooq.insertInto(AUDIT)
                .columns(AUDIT.FIELD_A, AUDIT.FIELD_B)
                .values(r.value1(), r.value2()).execute())
    
    
    select field_a, field_b into @a, @b from TABLE where ID = ?;
    insert into AUDIT (field_a, field_b) values(@a, @b);
    

    这是一个演示查询。我对有助于编写的工具感兴趣,而不是针对特定查询的变通方法。

1 个答案:

答案 0 :(得分:0)

jOOQ支持INSERT .. SELECT。您不应该在两个语句之间进行客户端往返,而是写下来:

<强> SQL:

insert into AUDIT (FIELD_A, FIELD_B)
select FIELD_A, FIELD_B from TABLE where ID = ?;

<强>爪哇:

jooq.insertInto(AUDIT, AUDIT.FIELD_A, AUDIT.FIELD_B)
    .select(DSL.select(TABLE.FIELD_A, TABLE.FIELD_B)
               .from(TABLE)
               .where(TABLE.ID.eq(id)))
    .execute();