【问题标题】:JOOQ BatchDelete records for a list of IDs用于 ID 列表的 JOOQ BatchDelete 记录
【发布时间】:2016-09-21 09:58:09
【问题描述】:
我有一个对象列表。
List <ObjList> objList;
列表中的每个对象都有一个 ID。
我想从 MyTable 表中删除与列表中每个对象的 ID 匹配的所有记录。
我的列表只是一个 POJO,而不是一个可更新的记录。那么有什么方法可以使用 batchDelete 方法来实现吗?
From the JavaDocs
batchDelete(UpdatableRecord...)
batchDelete(Collection<? extends UpdatableRecord<?>>)
另外,我想通过传递一个 ID 列表从 MyTable 中获取多条记录或列。
【问题讨论】:
标签:
java
sql
database
jooq
【解决方案1】:
根据删除的大小,您可能需要考虑首选批量删除(非常大的 ID 集)或批量删除(小到中等大小的 ID 集),或两者的组合。对于非常大的 ID 集,不时提交也是一个好主意。
批量删除:
// Assuming this static import:
import static org.jooq.impl.DSL.*;
using(configuration)
.batch(
deleteFrom(MY_TABLE).where(MY_TABLE.ID.eq((Integer) null)))
.bind(objList
.stream()
.map(o -> new Object[] { o.getId() })
.toArray())
.execute();
批量删除:
using(configuration)
.deleteFrom(MY_TABLE).where(MY_TABLE.ID.in(objList
.stream()
.map(MyObject::getId)
.collect(Collectors.toList())))
.execute();