通常的建议是在不再需要时关闭 JDBC 资源。这可以在最后完成。但是,如果一个 DAO 方法只操作一个域对象并且一个操作需要一次性检索/创建其中的多个域对象怎么办?获取声明然后反复关闭它是否会成为性能方面的问题?如果是这样,是否应该制定一个单独的方法来一次性处理多个对象,还是应该以某种方式延迟关闭?
最佳答案
您可以在 DAO 层之上添加一个额外的事务层,并在事务/ session 开始时在 Connection
上调用 setAutoCommit(false)
,让DAO 方法使用相同的 Connection
实例,然后在事务/ session 完成/关闭时使用 commit()
Connection
。但是,您需要更改 DAO 方法以将 Connection
作为额外参数,或将其存储在 ThreadLocal
(但是需要非常小心地完成,因为线程可能被合并)。
只要您始终使用 PreparedStatement
创建语句就不会那么昂贵,它通常被编译并缓存在数据库端。
关于java - Dao方法,操作单个/多个对象和关闭资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334131/