Aula 07 - Spring Data JPA e Repositories 📥
Hoje vamos aprender a mágica do Spring Data JPA: como fazer consultas ao banco de dados escrevendo muito pouco código.
😊 O Padrão Repository
Assim como vimos na Aula 04, o Repository isola o acesso a dados. Com o Spring Data JPA, você nem precisa implementar os métodos básicos — só declarar uma interface.
public interface ProdutoRepository extends JpaRepository<Produto, Long> {
// Já vem com: findAll(), findById(), save(), deleteById()...
}
📊 O que o JpaRepository já entrega pronto
graph TD
Interface[ProdutoRepository] -- extends --> Jpa[JpaRepository]
Jpa --> M1[findAll]
Jpa --> M2[findById]
Jpa --> M3[save]
Jpa --> M4[deleteById] 🧠 Conectando o Repository ao Service
Important
Quem chama o Repository é o Service, nunca o Controller diretamente (regra da Aula 04).
@Service
public class ProdutoService {
@Autowired
private ProdutoRepository repository;
public List<Produto> listar() {
return repository.findAll();
}
public Produto salvar(Produto produto) {
return repository.save(produto);
}
}
🧠 Query Methods: Consultas por Nome de Método
Uma das funcionalidades mais poderosas do Spring Data: ele cria a consulta SQL automaticamente a partir do nome do método!
public interface ProdutoRepository extends JpaRepository<Produto, Long> {
List<Produto> findByNomeContaining(String nome);
List<Produto> findByPrecoGreaterThan(double preco);
}
Tip
O Spring interpreta findByNomeContaining e gera automaticamente um SELECT ... WHERE nome LIKE %?% — sem você escrever uma linha de SQL.
📝 Exercícios Progressivos
- Básico: O que uma interface precisa fazer para virar um Repository funcional do Spring Data JPA?
- Básico: Cite 2 métodos que já vêm prontos ao estender
JpaRepository. - Intermediário: O que o método
findByPrecoGreaterThan(double preco)faz, mesmo sem você implementá-lo? - Intermediário: Por que o Controller não deve chamar o Repository diretamente?
- Desafio: Escreva a assinatura de um Query Method que busque produtos por uma categoria exata.
🚀 Mini-projeto: Crie o ProdutoRepository estendendo JpaRepository, injete-o no ProdutoService, e conecte o Service ao Controller da Aula 05 para que os dados venham de verdade do banco.