🚀 4.4 Repositórios de Elite com Spring Data JPA

Agora que nossas entidades estão mapeadas, precisamos de uma forma de persisti-las e consultá-las. No passado, isso exigiria a criação de classes DAO complexas com muito código JDBC. Na Engenharia Premium, utilizamos as interfaces do Spring Data JPA.

O Poder da Abstração

Com o Spring Data, nós definimos apenas a Interface. O Spring Boot, durante a inicialização, gera automaticamente a implementação em tempo de execução, gerenciando transações e conexões com o banco de dados.

Implementação dos Repositórios

Crie as seguintes interfaces no pacote repository:

package com.example.demo.repository;
 
import com.example.demo.domain.Cliente;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface ClienteRepository extends JpaRepository<Cliente, Long> {
    // Métodos customizados podem ser adicionados aqui
}
package com.example.demo.repository;
 
import com.example.demo.domain.Item;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface ItemRepository extends JpaRepository<Item, Long> {
}
package com.example.demo.repository;
 
import com.example.demo.domain.Pedido;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface PedidoRepository extends JpaRepository<Pedido, Long> {
}

Por Que JpaRepository?

Ao estender JpaRepository<T, ID>, ganhamos imediatamente:

  • CRUD Completo: save(), findById(), findAll(), delete().
  • Paginação e Ordenação: Suporte nativo para lidar com grandes volumes de dados.
  • Flush: Sincronização imediata com o banco de dados via saveAndFlush().

IMPORTANT

A anotação @Repository é opcional em interfaces que estendem JpaRepository, mas utilizá-la é uma boa prática para indicar explicitamente a semântica do componente e permitir a tradução de exceções de persistência para exceções do Spring.

No próximo capítulo, veremos como utilizar esses repositórios para realizar a carga inicial do nosso sistema.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️