Oi Alexandre,
Na verdade não é um repository para cada Controller
, mas sim para cada Entidade JPA
, pois os repository estão relacionados com a camada de persistência da aplicação.
A motivação do repository era para não ter que digitar todo o código de implementação, utilizando o EntityManager
da JPA, em todas as classes DAO, visto que o Spring Data JPA já abstrai esse código de implementação para você.
Até daria para criar um único Repository
genérico para o projeto:
public interface ForumRepository<T, ID> extends JpaRepository<T, ID> {
}
Onde T
seria a classe Entidade e ID
a classe do ID.
Para injetar em algum controller:
@RestController
@RequestMapping("/api/topicos")
public class TopicoRepository {
@Autowired
private ForumRepository<Topico, Long> topicoRepository;
@Autowired
private ForumRepository<Categoria, Long> categoriaRepository;
}
Mas o repository generico teria apenas os métodos que são comuns para todos os repositories: save, delete, findById, findAll, etc.
Mas na prática, em um projeto real, você acabaria precisando criar os repositories específicos, pois vai acabar precisando de consultas que não são genéricas, ou seja, que são específicas de um determinado repository.
Bons estudos!