我目前正在尝试批量插入许多记录(约2000条),但Jooq的batchInsert并没有做我想要的事情。
我正在将POJO转换为UpdatableRecords,然后执行batchInsert,它会为每个记录执行插入。因此,Jooq对于每个批量插入都执行了大约2000个查询,这损害了数据库性能。
执行的代码如下(jooq的批量插入):
for (int i = 0; i < records.length; i++) {
Configuration previous = ((AttachableInternal) records[i]).configuration();
try {
records[i].attach(local);
executeAction(i);
}
catch (QueryCollectorSignal e) {
Query query = e.getQuery();
String sql = e.getSQL();
// Aggregate executable queries by identical SQL
if (query.isExecutable()) {
List<Query> list = queries.get(sql);
if (list == null) {
list = new ArrayList<Query>();
queries.put(sql, list);
}
list.add(query);
}
}
finally {
records[i].attach(previous);
}
}
我可以像这样实现它(因为Jooq内部也在做同样的事情):
records.forEach(UpdatableRecord::insert);
替代方案:
jooq.batchInsert(records).execute();
我该如何让Jooq批量创建新记录?我应该将记录转换为绑定查询,然后调用batchInsert吗?有什么建议? ;)
Settings.batchSize
:https://github.com/jOOQ/jOOQ/issues/14840。在jOOQ 3.19之前,您必须自己手动将列表拆分为块。 - Lukas Eder