3

我应该在哪里打开和关闭与存储库的连接?在文章“不要重复 DAO ”中写道:

DAO 不负责处理事务、会话或连接。这些在 DAO 外部处理以实现灵活性。

但是有些人建议我将@Resource DataSource对象注入 DAO 类并处理 DAO 方法中的所有连接......即每个 CRUD 操作都应该打开和关闭与存储库的连接。

4

3 回答 3

6

接受文章中的建议。

您最好希望您的应用程序容器管理资源和连接池。如果您的连接配置了事务管理,那么容器将能够管理您的事务(因此无需打开连接并进行提交)。

如果您自己管理连接和事务,请先打开连接,启用事务并将打开的连接传递给 DAO,提交事务,然后关闭连接(在 DAO 之外)。

完成所有 DAO 的服务后,关闭连接。

希望这可以帮助。

于 2013-01-18T10:48:32.390 回答
1

我个人使用 Spring 来管理数据源。

在应用程序上下文 xml 中配置数据源 bean。将其自动连接到 DAO,然后使用 Spring 处理带有@TransactionalDAO 类上的注释的事务。

您还需要<tx:annotation-driven/>在您的应用程序上下文中。

如果您使用的是 Hibernate,您可以通过SessionFactory在应用程序上下文中配置来执行相同的操作。

于 2013-01-18T10:42:32.827 回答
0

我同意您可以使用 spring 来管理事务,但同时请记住,管理事务不是 DAO 的职责。它们应该在负责管理业务逻辑的服务层中处理。

于 2013-01-18T10:50:53.527 回答