JOOQ BatchDelete记录ID列表

时间:2016-05-24 09:20:50

标签: java sql database jooq

我有一个对象列表。

List <ObjList> objList;   

列表中的每个对象都有一个ID 我想从表MyTable中删除所有与列表中每个对象的ID匹配的记录 我的列表只是一个POJO而不是可更新的记录。那么有什么方法可以使用batchDelete方法来实现这个目的吗?

From the JavaDocs

batchDelete(UpdatableRecord...)  
batchDelete(Collection<? extends UpdatableRecord<?>>)

另外,我想通过传递ID列表从MyTable中获取多个记录或列。

1 个答案:

答案 0 :(得分:0)

根据删除的大小,您可能需要考虑更喜欢批量删除(非常大的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();