我可以在服务中使用SQL查询吗

时间:2019-02-28 11:32:40

标签: java spring spring-boot

执行SQL查询的推荐方法是使用@Repository批注创建存储库。我想知道是否还可以使用@Service批注在服务中执行SQL查询,或者这是否与特定的Spring原型有关?

例如:是否有任何规则可以保证@Service类必须具有业务逻辑并且@Repository必须具有查询执行?如果我在@Service类中执行查询,它将引发任何异常吗?

5 个答案:

答案 0 :(得分:4)

不,它不会引发任何异常。 但是将DB Logic和Business Logic分开的想法是将@Service用于服务实现(业务逻辑),并将@Repository用于存储库,即处理DB操作(可以是CRUD,PagingAndSorting等)。

因此,代码变得模块化,并遵守设计模式和编码标准。服务将使用存储库。您的处理程序将使用Service中的方法。就是这样。

答案 1 :(得分:4)

按照Spring API specification

  

用@Repository注释的类有资格使用Spring   结合使用DataAccessException转换   PersistenceExceptionTranslationPostProcessor。带注释的类是   还阐明了它在整个应用程序体系结构中的作用   出于工具,方面等目的。

因此,DataAccessException旨在使用户代码查找并处理遇到的错误类型,而无需知道所使用的特定数据访问API(例如JDBC)的详细信息。

@Service没有任何DataAccessException转换,因此您可以期望在使用@Service注释进行注释的类上发生未翻译的异常。它表明课程是业务服务门面

答案 2 :(得分:2)

每个注释都不会有任何规范。THIS答案将使您更加清楚,希望对您有帮助。

答案 3 :(得分:2)

@Service ,@Repository,@Controller@Component的特化,都被称为Spring Beans

 @Component  generic stereotype for any Spring-managed component 
 @Repository stereotype for persistence layer                    
 @Service    stereotype for service layer                        
 @Controller stereotype for presentation layer (spring-mvc) 

这都是关于分发问题(演示,业务,数据库)的,所以它不会遇到您所要求的任何例外情况。

您可以在这里了解更多-Spring Docs

答案 4 :(得分:1)

当我们要开发任何项目时,它应该是 lossy coupled and maintainable 。要实现这一层分离很重要

@Service-用@Service注释所有服务类。该层知道工作单元。您所有的业务逻辑都将在Service类中。通常,服务层的方法包含在事务中。您可以通过服务方法进行多个DAO调用。如果一项交易失败,则所有交易都应回滚。

@Repository-用@Repository注释所有DAO类。您所有的数据库访问逻辑都应在DAO类中。

@Component-用组件构造型注释其他组件(例如REST资源类)。

使用它们的原因:

  • 使用@Repository或@Service而不是@Component的主要优点 编写针对的AOP切入点很容易,因为 例如,所有带有@Repository注释的类。
  • 您不必在上下文xml文件中编写bean定义。代替 注释类并通过自动装配使用它们。
  • 专业注释有助于清楚地划分应用程序层 (在标准的3层应用程序中)。

什么是刻板印象 Refer Here

  

任何Spring托管组件的@Component通用构造型
  持久层的@Repository构造型
  服务层的@Service构造型
  表示层的@Controller原型(spring-mvc)

有关更多详细信息,Click HereHere