Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DAO与连接_Java_Design Patterns_Dao - Fatal编程技术网

Java DAO与连接

Java DAO与连接,java,design-patterns,dao,Java,Design Patterns,Dao,我应该在哪里打开和关闭到存储库的连接?在第“”条中写道: DAO不负责处理事务、会话或会话 连接。这些在DAO之外处理,以实现灵活性 但有些人建议我将@Resource-DataSource对象注入到DAO类中,并处理DAO方法内部的所有连接…即。每个CRUD操作都应该打开和关闭到存储库的连接。我个人使用Spring来管理数据源 在应用程序上下文xml中配置数据源bean。将其自动连接到DAO,然后使用Spring处理DAO类上带有@Transactional注释的事务 您还需要在应用程序上下文

我应该在哪里打开和关闭到存储库的连接?在第“”条中写道:

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


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

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

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

您还需要在应用程序上下文中使用


如果您使用的是Hibernate,您可以通过在应用程序上下文中配置
会话工厂来实现同样的功能。

参考文章中的建议

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

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

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


希望这能有所帮助。

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

对不起,我不使用nor Spring not HibernateDAO不应该负责处理连接,但这取决于它们@MyTitle如果不使用Spring或Hibernate,则必须在事务的业务逻辑层中处理这些连接。从数据源获取一个连接后,业务层组件将把它传递到DAO中。实际上,Spring已经提供了一些方便的XXXDAOSupport类,它与datasouce配合得非常好。@Gavinxiang谢谢,在您的评论之后,我对这个过程有了更清楚的理解。第二个问题(可能是离题的):使用EJB作为DAO对象怎么样?然后在另一个EJB(即服务层)中重用此DAO(实际上是EJB)。我们不管理DAO内的连接,因为您可以有多个DAO使用同一个打开的连接获取实体。我是否应该在服务层内处理连接(也作为事务)?即服务层将打开连接,然后打开事务,然后将DAO对象用于某些业务逻辑,提交事务并关闭连接?这是真的吗?不,DB连接将仅在DAO层中处理。它是唯一由服务层处理的事务。是的,我自己管理事务和连接<代码>首先打开连接,启用事务并将打开的连接传递给DAO
-我可以在服务层执行此操作吗?或者我需要创建一些包装类来隐藏所有低级机制(打开连接、事务)并在服务层中使用这些包装类?另外,我使用JavaEE5,所以我可以使用EJB来实现DAOs吗?回答您所有的问题:是的!