Spring Data JPA: o que é e como implementar?

O Spring Data JPA fornece um modelo consistente de programação considerando os aspectos específicos de cada sistema de armazenamento de dados.

Se você está buscando maior produtividade e eficiência na implementação de funcionalidades na camada de persistência de seus projetos Java, não pode deixar de conhecer (e aplicar!) o subprojeto Spring Data JPA.

Muitos desenvolvedores se deparam com dificuldades para mapear e manipular objetos em Java para as representações em um banco de dados. Afinal, os registros em Java são caracterizados por objetos que apresentam comportamento e o banco de dados possui forma textual, sem comportamento.

Como resolver esse problema? Com a padronização do mapeamento e das especificações dos frameworks, sem precisar que um mesmo código seja reescrito várias vezes ou usar muitos códigos para operações simples. Ou seja, com o Spring Data JPA.

Continue a leitura até o final e entenda o que é esse subprojeto do Spring Data e como implementar o Repository Spring Data nos seus projetos.

O que é Spring Data JPA?

O Spring Data JPA (Java Persistence API) é um projeto da Spring Source e subprojeto do Spring Data com proposta de padronizar e facilitar o acesso a diferentes tecnologias de armazenamento de dados, como bancos de dados relacionais e não relacionais, utilizando as funcionalidades da especificação JPA.

Ou seja, ele elimina a necessidade de implementar interfaces referentes aos repositórios ou DAOs, deixando algumas funcionalidades pré-instaladas, como paginação de registros e ordenação das consultas.

Sua principal finalidade é integrar as aplicações Spring com a JPA. E podemos dizer que esse framework tem tido bastante sucesso no seu objetivo. Afinal, ele tem como maior benefício a capacidade de criar a camada de acesso aos dados sem a necessidade de implementar manualmente as classes de Data Access Object.

Ele apresenta as seguintes funcionalidades:

  • Operações de criação, remoção, modificação e seleção, chamadas de CRUD;
  • Query Methods;
  • Method Names;
  • Query Annotation;
  • Named Queries;
  • Ordenação.

< Aprenda mais: Linguagens back-end: qual é a melhor opção para o seu projeto? />

Como funciona o Spring Data?

Para entender melhor como ele atua dentro do sistema do Spring Data, analise a Figura 01. Esse framework possui vários módulos de acesso em diferentes modelos de bancos de dados.

Ele contém diversos subprojetos para trabalhar com as especificidades dos variados Sistemas de Gerenciamento de Banco de Dados (SGBDs).

Figura 01. Visão geral da arquitetura do Spring Data.

Tem-se o módulo Spring Data JPA que adiciona uma camada extra sobre o JPA Provider. Esse módulo contém uma camada Repositórios (JpaRepository) que dá suporte à criação de repositórios estendendo interfaces do Spring Data. A infraestrutura é compartilhada pelos bancos e o JPA Provider que implementa o JPA.

Além do Spring Data JPA, tem o módulo Spring Data MongoDB que provê suporte à persistência de dados com o banco de dados MongoDB e possui métodos básicos para armazenamento e recuperação de documentos. Sua principal característica é o suporte à persistência de dados não estruturados.

Já o módulo Spring Data Neo4J cuida da persistência de dados no SGBD Neo4J. Ele é um banco orientado a grafos que permite o armazenamento e a recuperação de dados. É similar aos bancos relacionais no tocante às transações e às operações ACID (Atomicidade; Consistência; Isolamento e Durabilidade).

< Leia também: Mongodb: o que é e como usar esse banco de dados? />

Como implementar Repository do Spring Data?

O objetivo do Spring Data Custom Repository é reduzir a quantidade de código necessário para implementar a camada de acesso e persistência de dados.

A abstração principal é a classe Repository. Sua principal finalidade é gerenciar a classe de domínio assim como o tipo de dado do id da classe.

CrudRepository

Disponibiliza operações CRUD para a entidade que está sendo gerenciada. A Figura 02 traz a estrutura dessa interface em que se pode notar várias operações como save, findOne e delete.

Essa interface já é fornecida pelo Spring Data. Para utilizá-la, deve-se apenas implementá-la criando um repositório específico para cada entidade.

    Figura 02. IntefaceCrudRepository.

PagingAndSortingRepository

No contexto de uma aplicação com vários formulários, é comum ter funcionalidades em que os usuários podem fazer consultas e essas podem retornar zero ou dezenas de registros.

É sabido que, quando a consulta retorna muitos registros, não é interessante listar todos esses dados para o usuário: deve-se dividir os dados em páginas. Além disso, esses dados são ordenados de acordo com algum critério.

É prática comum o uso de estratégias para buscar as informações de uma base de dados de tal forma que essa informação será paginada, ou seja, a consulta não trará todos os dados, mas apenas aqueles que serão apresentados ao usuário de acordo com a página em que o mesmo está inspecionando.

O Spring Data fornece a interface PagingAndSortingRepository que traz facilidades para implementar a estratégia de ordenação e paginação. A Figura 03 traz as duas operações dessa interface. Ao implementá-la, tem-se algumas comodidades em relação à implementação de um sistema de paginação e ordenação.

Figura 03. Interface PagingAndSortingRepository.

O código abaixo mostra o uso do PagingAndSortingRepository para buscar um conjunto de 20 produtos da tabela Produto que se refere à página 1. A classe PageRequest permite definir a página passando para seu construtor a página e o tamanho da mesma.

PagingAndSortingRepository<Produto, Integer> repository = // … get access to a bean

Page<Produto> produtos = repository.findAll(new PageRequest(1, 20));

Métodos de Consulta

É comum a necessidade de métodos de acesso às entidades além daqueles de CRUD. O Spring Data com a classe Repository fornece uma estrutura que permite a criação de métodos de acesso sem a necessidade de escrever comandos SQL.

O exemplo de código abaixo tem uma interface UsuarioRepository definida pelo desenvolvedor que estende a classe Repository .

O método findByNome da interface é a implementação da consulta que busca uma lista de usuários de acordo com o nome. Com apenas a assinatura do método, a consulta já está feita.

O Spring Data gera automaticamente a consulta correspondente simplesmente com a assinatura do método.

Nota-se que o nome do método tem três elementos importantes:

  • o findBy;
  • o Nome;
  • o parâmetro String nome.

O método sempre tem que iniciar por findBy para consultas, o Nome do exemplo se refere ao atributo nome da entidade Usuário, já o parâmetro String nome é o valor que será usado para filtrar a consulta por nome.

O nome da variável do parâmetro pode ser qualquer nome, porém a cadeia de caracteres que acompanha o findBy tem que ser exatamente o nome da propriedade da entidade com a primeira letra em caixa-alta. Se a consulta fosse filtrada por senha, então a assinatura do método seria List<Usuario>findBySenha(String senha).

public interface UsuarioRepository extends Repository<Usuario, Long> {

List<Usuario>findByNome(String nome);   }

Consultas com JPQL

Além da funcionalidade de criar consultas pela assinatura do método, é possível que você precise executar consultas com JPQL. Por isso, o time que desenvolveu o Spring Data JPA incluiu a anotação @Query Spring Data no framework:

public interface Produtos extends JpaRepository<Produto, Long> {

@Query(“from Produto where nome like concat(?1, ‘%’)”)

List<Produto> pesquisarProdutos(String nome);

}

Percebe-se que nesse método é preciso criar a consulta e um parâmetro, porque o Spring Data JPA vai usá-lo no momento da execução. 

Com este artigo foi possível conhecer algumas das potencialidades do framework Spring Data JPA aplicado no Big Data. Essa tecnologia permite que o Engenheiro de Software trabalhe com facilidades usando bancos de dados relacionais ou não relacionais como o MongoDB, Neo4J e Redis.

Se você quer se aprofundar mais neste assunto, assine a plataforma XPE Multi+ e tenha acesso a dezenas de cursos de tecnologia da informação. Nela, você pode se matricular em vários Bootcamps, assistir a dezenas de aulas interativas, acessar materiais de conteúdos didáticos, matricular-se em Imersões Internacionais e muito mais!

spot_img

Continue Aprendendo

spot_img