Pular para conteúdo

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

  1. Básico: O que uma interface precisa fazer para virar um Repository funcional do Spring Data JPA?
  2. Básico: Cite 2 métodos que já vêm prontos ao estender JpaRepository.
  3. Intermediário: O que o método findByPrecoGreaterThan(double preco) faz, mesmo sem você implementá-lo?
  4. Intermediário: Por que o Controller não deve chamar o Repository diretamente?
  5. 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.