【问题标题】:Dao methods, manipulating single/multiple objects and closing resourcesDao 方法,操作单个/多个对象和关闭资源
【发布时间】:2010-07-26 10:53:11
【问题描述】:

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

【问题讨论】:

    标签: java jdbc resources dao


    【解决方案1】:

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

    只要您一直使用PreparedStatement,创建语句不应该那么昂贵,通常在数据库端编译和缓存。

    【讨论】:

      【解决方案2】:

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

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

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

      如果你使用一些框架,框架通常会为你做资源管理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多