🚀 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 estendemJpaRepository, 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.