2

我正在开发我的课程结论工作(最终毕业工作)。我们仅将 Java 与 Spring MVC 和 Glassfish Application Server 一起使用。我们不会使用 Hibernate 或 JPA,因为我们将在 MS SQL Server 2008 中使用存储过程,所以 JDBC 似乎是调用它们的最有效方式(因为据我所知,我不能将对象传递为SQL Server 的参数)。我们已经在 Glassfish 上配置了数据源池。我们知道我们需要一个 DAO 来从 SQL Server 调用过程。我的问题是:

1-) 我是否需要(或者它是使用的最佳实践)一个服务对象(正确注释为@Service)来调用 DAO 方法?或者我可以直接从控制器调用 DAO 方法?

2-) 从数据源获取连接的最佳方法是什么?每个 DAO 上具有 getConnection 方法或 ds.getConnection() 的分离类?

谢谢

4

2 回答 2

1

我倾向于拥有服务层的最大原因有以下两个原因......

  1. 将方法标记为@Transactional,以便此方法中的所有 DAO 请求都发生在单个事务中。

  2. 我可以增加关注点与 DAO 和用户角色的分离。我可以将方法标记为需要某些用户角色,因此它非常适合 Spring Security。

您可以只从控制器调用 DAO,但如果您想稍后扩展,它会让您陷入困境。要获得连接,您可以使用将服务标记为@Transactional 并将DAO 标记为@Repository,Spring 将为您处理获取会话对象和注入等的整个过程。

我倾向于(可能不正确地)将服务层视为可以访问的外观,无论是从 Web 服务还是控制器或其他任何东西,它都保持分离。

于 2013-04-16T13:26:50.897 回答
0

是的,一定要从控制器调用 dao/repository,否则你将结束创建大量不必要的类。Spring 可以轻松地将所需的事务设置为 new,以便创建一个事务(如果尚未存在)。

多个DAO/业务实体涉及到一个工作单元/业务逻辑时,请使用服务。为简单的 getter 创建服务类是没有意义的。

于 2013-04-16T16:18:46.367 回答