Java或Only Repository中的服务层

时间:2017-07-07 19:54:36

标签: java spring

如果我有Spring数据存储库,其中包括保存,删除和修改操作。我应该在服务层中创建以下方法操作吗?并添加注释@Transactional? 或者保持原样?或者我应该在存储库层中拥有它们吗?

示例服务

@Service
public class RepositoryOperations{

@Autowired
ProductRepository productRepository;

@Transactional
public void saveProduct(){
    productRepository.save();
    }

...

}

2 个答案:

答案 0 :(得分:3)

我认为您正在为代码使用一种好的方法。您可以创建一个服务层来调用产品存储库方法,以便将职责(业务与数据逻辑)分开。

3层架构描述了您的方法如下:

  • 控制器:处理进入系统的所有输入值(例如,来自endpoins)并将它们传递给服务。在Spring中,您可以使用@Controller类注释,以便将它们与其他组件区分开来。
  • 服务:处理与您的应用程序相关的所有业务逻辑的组件。您可以使用@Service注释。
  • DAO(数据访问对象):包含数据逻辑的类(在您的情况下,是存储库)。您可以使用@Repository注释。

为了防止在出现问题时saveProduct()服务方法出现任何不一致,您可以使用@Transactional注释来回滚您的方法在数据库中所做的所有更改,因此我认为它是'当您在数据库中编写操作时,一个好的做法是使用该注释。

答案 1 :(得分:0)

我们一般保留三层 1.控制器定义API端点并调用appropraite服务来处理请求 2.服务层意味着我们称之为繁重的处理或业务逻辑。如果服务层需要从数据库中保存或检索数据,它将使用dao层来实现这一点 3. Dao层的唯一作用是从数据库中保存或检索数据并将其提供回服务。它不应该执行任何业务逻辑。

使用注释@Repository注释您的dao图层 使用注释@Service添加注释服务图层 使用注释@Controller或@RestController注释您的控制器(如果您有REST API)

如果希望代码在失败时回滚,则使用

@Transactional注释。如果您的服务为三个不同的操作发出三个dao调用,并且您希望执行这三个操作中的所有操作或不执行这三个操作,请使用@Transactional为您的服务方法添加注释 同样适用于dao方法 所以你现在有相当多的信息要做决定。