Java Dao方法,操作单个/多个对象并关闭资源

Java Dao方法,操作单个/多个对象并关闭资源,java,jdbc,resources,dao,Java,Jdbc,Resources,Dao,通常的建议是,一旦不再需要JDBC资源,就关闭它们。这可以在一次捕获和最后完成。但是,如果一个DAO方法只处理一个域对象,而一个操作需要一次检索/创建其中几个域对象,该怎么办?在性能方面,获得一份声明并反复关闭它会是一个问题吗?如果是这样的话,是应该使用单独的方法一次性处理多个对象,还是应该以某种方式延迟关闭?我认为应用程序是否基于Dao没有区别。这些资源应该关闭。如果您在没有任何框架的情况下工作(spring、hibernate等) 如果存在池,则应将java.sql.Connection放回

通常的建议是,一旦不再需要JDBC资源,就关闭它们。这可以在一次捕获和最后完成。但是,如果一个DAO方法只处理一个域对象,而一个操作需要一次检索/创建其中几个域对象,该怎么办?在性能方面,获得一份声明并反复关闭它会是一个问题吗?如果是这样的话,是应该使用单独的方法一次性处理多个对象,还是应该以某种方式延迟关闭?

我认为应用程序是否基于Dao没有区别。这些资源应该关闭。如果您在没有任何框架的情况下工作(spring、hibernate等)

如果存在池,则应将java.sql.Connection放回池中。 执行查询后,应关闭ResultSet和Statement对象

根据您的体系结构,这些资源管理代码可以放在Dao类或其他类中。例如,有些类专注于构建和执行sql查询。资源管理代码可以在这些类中


如果您使用一些框架,框架通常会为您进行资源管理

您可以在DAO层的顶部添加一个额外的事务层,并在事务/会话开始时在
连接上调用
setAutoCommit(false)
,让DAO方法使用相同的
连接
实例,然后调用
commit()
事务/会话完成/关闭时的连接。但是,您需要更改DAO方法,以将
连接
作为额外参数,或将其存储为
ThreadLocal
(但这需要非常小心,因为线程可能会被池化)

只要您始终使用
PreparedStatement
,创建语句就不应该那么昂贵,它通常被编译并缓存在数据库端