我应该在哪里打开和关闭与存储库的连接?在文章“不要重复 DAO ”中写道:
DAO 不负责处理事务、会话或连接。这些在 DAO 外部处理以实现灵活性。
但是有些人建议我将@Resource DataSource
对象注入 DAO 类并处理 DAO 方法中的所有连接......即每个 CRUD 操作都应该打开和关闭与存储库的连接。
我应该在哪里打开和关闭与存储库的连接?在文章“不要重复 DAO ”中写道:
DAO 不负责处理事务、会话或连接。这些在 DAO 外部处理以实现灵活性。
但是有些人建议我将@Resource DataSource
对象注入 DAO 类并处理 DAO 方法中的所有连接......即每个 CRUD 操作都应该打开和关闭与存储库的连接。
接受文章中的建议。
您最好希望您的应用程序容器管理资源和连接池。如果您的连接配置了事务管理,那么容器将能够管理您的事务(因此无需打开连接并进行提交)。
如果您自己管理连接和事务,请先打开连接,启用事务并将打开的连接传递给 DAO,提交事务,然后关闭连接(在 DAO 之外)。
完成所有 DAO 的服务后,关闭连接。
希望这可以帮助。
我个人使用 Spring 来管理数据源。
在应用程序上下文 xml 中配置数据源 bean。将其自动连接到 DAO,然后使用 Spring 处理带有@Transactional
DAO 类上的注释的事务。
您还需要<tx:annotation-driven/>
在您的应用程序上下文中。
如果您使用的是 Hibernate,您可以通过SessionFactory
在应用程序上下文中配置来执行相同的操作。
我同意您可以使用 spring 来管理事务,但同时请记住,管理事务不是 DAO 的职责。它们应该在负责管理业务逻辑的服务层中处理。