因为我有一些简单的查询,有些需要特殊操作,所以在我的项目中,我使用JDBI的Object 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是否像抽象方法一样处理关闭? / p>
答案 0 :(得分:1)
使用onDemand时无需关闭句柄。
来自文档:
获取sql对象实例的最终方法将根据需要自动获取和释放连接。通常这意味着它将获得执行语句的连接然后立即释放它,但是诸如打开事务或基于迭代器的结果之类的各种事情将导致连接保持打开,直到事务完成或完全遍历迭代结果。