我正在开发课程结论工作(最终毕业工作)。 我们只将Java与Spring MVC和Glassfish Application Server一起使用。我们不会使用Hibernate或JPA,因为我们将在MS SQL Server 2008中使用存储过程,因此JDBC似乎是调用它们的最有效方法(因为据我所知,我不能将对象传递为SQL Server的参数)。我们在Glassfish上配置了数据源池。我们知道我们需要一个DAO来从SQL Server调用这些过程。我的问题是:
1-)我是否需要(或者是最佳使用)Service对象(正确注释为@Service)来调用DAO方法?或者我可以直接从控制器调用DAO方法?
2-)从DataSource获取Connection的最佳方法是什么?在每个DAO上使用getConnection方法或ds.getConnection()的分隔类?
由于
答案 0 :(得分:1)
我倾向于倾向于使用服务层的最大原因有以下两个原因......
将方法标记为@Transactional,以便此方法中的所有DAO请求都在单个事务中进行。
我可以通过DAO和用户角色增加关注点的分离。我可以将方法标记为需要某些用户角色,因此它非常适合Spring Security。
你可以从控制器中调用DAO,但是如果你想稍后扩展它会让你陷入困境。要获得连接,您可以使用将服务标记为@Transactional,将DAO标记为@Repository,Spring将处理整个获取会话对象和注入等。
我倾向于认为(可能不正确)将服务层作为可访问的外观,无论是来自Web服务还是控制器,或者其他什么,它都会分开。
答案 1 :(得分:0)
是的,无论如何都要从控制器调用dao / repository,否则你将最终创建一个不必要的类。 Spring使得交易所需的新变得容易,因此如果事务尚未存在,则创建事务。
在一个工作/业务逻辑单元中涉及多个 DAO /业务实体时,使用服务。为简单的getter创建服务类没有意义。