Spring Data: Como realizar integrações de maneira facilitada

Guia sobre o Spring Data, a abstração do Spring para acesso a dados: suporte a bancos relacionais e NoSQL, interfaces prontas e anotações de personalização.

O Spring Data é uma abstração criada pelo Spring para interagirmos com dados, sejam de fontes relacionais ou não relacionais. Além de fornecer as operações mais comuns como listar ou salvar prontas, também provê formas práticas de personalizar consultas.

1. Recursos

  • Suporte a bancos relacionais (JPA) e não relacionais (MongoDB, Redis, Cassandra)
  • Interfaces prontas como CrudRepository, JpaRepository e PagingAndSortingRepository
  • Query methods derivados do nome do método
  • Anotações para personalização com @Query

2. Exemplo com JPA

Adicione a dependência no build.gradle:

1
2
3
4
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
}

Crie a entidade e o repositório:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@Entity
public class Cliente {
    @Id @GeneratedValue
    private Long id;
    private String nome;
    private String email;
    // getters e setters omitidos (use Lombok!)
}

public interface ClienteRepository extends JpaRepository<Cliente, Long> {
    List<Cliente> findByNomeContainingIgnoreCase(String nome);
    Optional<Cliente> findByEmail(String email);
}

O Spring Data implementa automaticamente os métodos da interface. O método findByNomeContainingIgnoreCase gera a query SELECT * FROM cliente WHERE nome LIKE %:nome% sem escrever uma linha de SQL.

3. Exemplo com MongoDB

1
2
3
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
@Document
public class Produto {
    @Id
    private String id;
    private String nome;
    private BigDecimal preco;
}

public interface ProdutoRepository extends MongoRepository<Produto, String> {
    List<Produto> findByPrecoBetween(BigDecimal min, BigDecimal max);
}

Mais informações:

comments powered by Disqus
Criado com Hugo
Tema Stack desenvolvido por Jimmy