【问题标题】:Jooq: Insert multiple records as batchJooq:批量插入多条记录
【发布时间】:2020-03-18 22:17:45
【问题描述】:

所以我只使用 Jooq 来构建查询,而不是执行查询,如下所示:

AsyncTransactionalConnection conn = getAsyncTransactionalConnection();
InsertResultStep<PersonRecord> insert = /* create insert statement ... */;
conn.asyncExecute(insert);

conn 对象可以执行查询conn.asyncExecute(org.jooq.Query query)。 所以我的问题是,如何创建org.jooq.Query 类型的批量插入查询? 具体来说,给定一个列表List&lt;InsertResultStep&lt;PersonRecord&gt;&gt;,我如何为整个列表创建org.jooq.Query 的实例?

请注意,我知道其他有关如何使用 Jooq 进行批量插入的问题,但他们使用 Jooq 执行查询,就像下面 Jose Martinez 的回答一样,而这里我只使用 Jooq 构建查询并使用其他机制执行查询。不是我的选择,但系统一直是这样的。

【问题讨论】:

    标签: java mysql sql database jooq


    【解决方案1】:

    您可以从 DSLContext 创建一个批处理并同时执行它。

    dslContext.batch(
        create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(1, "Erich"  , "Gamma"    ),
        create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(2, "Richard", "Helm"     ),
        create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(3, "Ralph"  , "Johnson"  ),
        create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(4, "John"   , "Vlissides"))
    .execute();
    

    DSLContext 中的 batch(...) 函数不返回 Query 对象,而是返回 Batch 对象(它不是 Query 的子类型)。请参阅API docs 了解更多信息。

    【讨论】:

    • 这是一个查询插入还是多查询?
    • 它的多个插入同时执行。这称为批处理。它减少了服务器上的网络流量和处理。
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 2011-02-20
    • 2018-08-13
    • 2017-07-23
    • 1970-01-01
    • 2021-03-27
    • 2020-05-22
    • 2014-08-25
    相关资源
    最近更新 更多