使用JDBI的onDemand语法,是否需要关闭句柄?

使用JDBI的onDemand语法,是否需要关闭句柄?,jdbi,Jdbi,因为我有一些简单的查询,还有一些需要特殊操作,所以在我的项目中,我使用了JDBI的对象api和流体语法,以及它的onDemand功能,如下所示: public abstract class MyDAO implements GetHandle { @SqlQuery("SELECT anInt FROM aTable;") public abstract int getAnInt(); public List<Integer> insertThings(L

因为我有一些简单的查询,还有一些需要特殊操作,所以在我的项目中,我使用了JDBI的对象api和流体语法,以及它的onDemand功能,如下所示:

public abstract class MyDAO implements GetHandle {

    @SqlQuery("SELECT anInt FROM aTable;")
    public abstract int getAnInt();

    public List<Integer> insertThings(List<Thing> things) {

        Handle h = getHandle();

        PreparedBatch batch = h.prepareBatch("INSERT INTO thingsTable (a, b) VALUES (?, ?)");

        for (Thing thing : things) {
            batch.add(things.getA(), thing.getB());
        }

        List<Integer> ids = batch.executeAndGenerateKeys(IntegerColumnMapper.WRAPPER).list();

        h.close();

        return ids;
    }
}

//Elsewhere in my code

MyDAO dao = jdbi.onDemand(myDAO.class);

dao.insertThings(things);

因此,我的问题是,当以这种方式使用JDBI时,我是否需要确保像在示例中一样关闭句柄,或者onDemand是否像在抽象方法中一样负责关闭句柄?

使用onDemand时,您不需要关闭句柄

从文件中:

获取sql对象实例的最后一种方法将根据需要自动获取和释放连接。一般来说,这意味着它将获得一个连接来执行一条语句,然后立即释放它,但是诸如打开的事务或基于迭代器的结果之类的各种事情将导致连接保持打开状态,直到事务完成或迭代结果被完全遍历为止


请参见本页末尾:

我就是这么想的,我担心的是,由于我在正常流程之外打开了手柄,因此我也必须自己关闭它。