如果我有Spring数据存储库,其中包括保存,删除和修改操作。我应该在服务层中创建以下方法操作吗?并添加注释@Transactional
?
或者保持原样?或者我应该在存储库层中拥有它们吗?
示例服务
@Service
public class RepositoryOperations{
@Autowired
ProductRepository productRepository;
@Transactional
public void saveProduct(){
productRepository.save();
}
...
}
答案 0 :(得分:3)
我认为您正在为代码使用一种好的方法。您可以创建一个服务层来调用产品存储库方法,以便将职责(业务与数据逻辑)分开。
3层架构描述了您的方法如下:
为了防止在出现问题时saveProduct()服务方法出现任何不一致,您可以使用@Transactional注释来回滚您的方法在数据库中所做的所有更改,因此我认为它是'当您在数据库中编写操作时,一个好的做法是使用该注释。
答案 1 :(得分:0)
我们一般保留三层 1.控制器定义API端点并调用appropraite服务来处理请求 2.服务层意味着我们称之为繁重的处理或业务逻辑。如果服务层需要从数据库中保存或检索数据,它将使用dao层来实现这一点 3. Dao层的唯一作用是从数据库中保存或检索数据并将其提供回服务。它不应该执行任何业务逻辑。
使用注释@Repository
注释您的dao图层
使用注释@Service
添加注释服务图层
使用注释@Controller
或@RestController注释您的控制器(如果您有REST API)
@Transactional
注释。如果您的服务为三个不同的操作发出三个dao调用,并且您希望执行这三个操作中的所有操作或不执行这三个操作,请使用@Transactional
为您的服务方法添加注释
同样适用于dao方法
所以你现在有相当多的信息要做决定。