执行SQL查询的推荐方法是使用@Repository
批注创建存储库。我想知道是否还可以使用@Service
批注在服务中执行SQL查询,或者这是否与特定的Spring原型有关?
例如:是否有任何规则可以保证@Service
类必须具有业务逻辑并且@Repository
必须具有查询执行?如果我在@Service
类中执行查询,它将引发任何异常吗?
答案 0 :(得分:4)
不,它不会引发任何异常。 但是将DB Logic和Business Logic分开的想法是将@Service用于服务实现(业务逻辑),并将@Repository用于存储库,即处理DB操作(可以是CRUD,PagingAndSorting等)。
因此,代码变得模块化,并遵守设计模式和编码标准。服务将使用存储库。您的处理程序将使用Service中的方法。就是这样。
答案 1 :(得分:4)
用@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资源类)。
使用它们的原因:
什么是刻板印象 Refer Here
任何Spring托管组件的@Component通用构造型
持久层的@Repository构造型
服务层的@Service构造型
表示层的@Controller原型(spring-mvc)
有关更多详细信息,Click Here和Here