DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!

Persistência com Spring Data JPA - Revista Java Magazine 103

O artigo apresenta o projeto Spring Data-JPA, lançado em 2011 e construído com base nos conceitos do padrão de projeto Repository, o que torna a programação do código de persistência muito mais simples e ágil.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?





Java Magazine 103

[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]

> Clique aqui para ler todos os artigos da Java Magazine 103


Quando chega a hora de iniciar um novo projeto de software, a equipe de desenvolvimento começa a ter diversas dúvidas sobre o que usar. Escolher as ferramentas certas, para cada tipo de projeto, entre todas as disponíveis em Java, é sempre um processo bem difícil.

Escolher um framework então pode complicar ainda mais a decisão de o que usar em um novo projeto. Os frameworks, às vezes, possuem um objetivo bem específico, como por exemplo: um framework de persistência tem a responsabilidade apenas de persistir dados; um framework MVC tem como finalidade a inclusão do padrão MVC no projeto; frameworks de interface com o usuário (UI) disponibilizam componentes para a camada de visualização. Mas felizmente, para os apreciadores do Spring Framework, este surge como uma solução que se adapta a vários tipos de projeto. Considerado uma ferramenta de fácil aprendizado, também disponibiliza uma vasta quantidade de APIs que podem ser usadas inclusive na integração com outros frameworks.

Os desenvolvedores do Spring estão sempre trabalhando para aperfeiçoar os recursos já disponíveis no framework, como também para adicionar novos recursos, que possam facilitar ainda mais o processo de desenvolvimento de aplicações. Entre esses processos, as operações de CRUD sempre foram um dos focos do Spring, sejam elas com uso de algum framework de persistência ou mesmo sem o uso deles. Para isso, algumas APIs foram disponibilizadas, como o JdbcTemplate, HibernateTemplate, JpaTemplate, entre outras.

As APIs de persistência sempre estiveram presentes no Spring Framework com a finalidade de facilitar o processo de implementação das classes direcionadas a operações de CRUD. Ainda não satisfeitos com as opções existentes no framework, os desenvolvedores do Spring lançaram nos primeiros meses de 2011 um novo projeto, chamado Spring Data-JPA.

Este projeto tem como objetivo facilitar as operações de CRUD baseadas em implementações JPA 2, reduzindo o esforço do programador para a quantidade de código que realmente se faz necessária. A Java Persistence API, ou apenas JPA, é uma especificação Java (JSR 317) que deve ser seguida por frameworks de mapeamento objeto-relacional (ORM), como o Hibernate, TopLink ou IBatis. Ela padroniza um conjunto de classes e métodos que devem ser implementados pelos frameworks ORM que desejam seguir a especificação. A vantagem em adotar este padrão é que um framework pode ser trocado por outro sem que exista a necessidade de modificar as classes e métodos de persistência da aplicação.

O projeto Spring Data-JPA, embora não seja um framework ORM, foi desenvolvido com base no padrão JPA 2 para trabalhar com qualquer framework que siga tal especificação. Ele é responsável pela implementação dos repositórios (camada de persistência de dados), oferecendo funcionalidades sofisticadas e comuns à maioria dos métodos de acesso a banco de dados. Ao programador, se abstrai a necessidade de criar classes concretas para os repositórios, sendo necessário apenas criar uma interface específica para cada classe de entidade, e nelas, estender a interface JpaRepository. Ao herdar a interface JpaRepository, dois propósitos são preenchidos: no primeiro, uma variedade de métodos como save(), delete(), findAll(), entre outros, são fornecidos; e no segundo, o reconhecimento desta interface como um bean do Spring, o que é útil para a injeção de dependência.

Entidade ou Tabela: É onde todas as informações inseridas em um banco de dados relacional são armazenadas. É uma estrutura formada por linhas e colunas onde cada linha consiste de pelo menos uma ou várias colunas.

Classe de Entidade: É uma classe do tipo Bean que faz referência a uma entidade do banco de dados, e cada instância desta entidade representa uma linha (registro ou tupla) na tabela (entidade).

Outra funcionalidade interessante se refere aos métodos de pesquisa. Em um projeto sem o uso de Spring Data, teríamos geralmente uma interface, e nela, alguns métodos de consulta seriam definidos. Estes métodos posteriormente seriam codificados em uma classe concreta. Quando se faz uso de Spring Data, basta incluir a assinatura do método de pesquisa na interface e adicionar a esta assinatura uma anotação do tipo @Query, com a respectiva consulta no formato JPQL. A implementação deste método será realizada automaticamente pelo Spring em tempo de execução.
"
A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Marcio Ballem De Souza
Marcio Ballem de Souza é bacharel em Sistemas de Informação pelo Centro Universitário Franciscano em Santa Maria/RS. Tem experiência com desenvolvimento Delphi e Java em projetos para gestão pública e acadêmica. Possui certificação em Java, OCJP 6.
O que você achou deste post?

    18 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Paulo Vicente Silva Moreira Calçada
Muito boa didática a do Marcio. Facilitou em muito o entendimento de um tópico que não é tão simples como alguns apregoam. Parabéns !!!
[há +1 ano] - Responder

 

[autor] Marcio Ballem De Souza
Obrigado Paulo, minha intenção é sempre tentar explicar o conteúdo de maneira que facilite o aprendizado do leitor.

Abraço!
[há +1 ano] - Responder
 

Antonio Marcos.
Marcio Balem,

Gostei muito do artigo, eu que não trabalhei com este Framework tive uma boa ideia de como funciona, com esta sua explicação bem detalhada. Continuem fazendo esses tipos de artigos e com esta riqueza de detalhes.
[há +1 ano] - Responder

 

[autor] Marcio Ballem De Souza
Antonio Marcos, muito obrigado pelo comentário. Fico feliz em saber que o artigo foi útil para você.
Abraço!
[há +1 ano] - Responder
 

Carlos Alberto Bertuol
Nao estou conseguindo encontrar o link para download do projeto conforme previsto. pg 6.
....e o código fonte aqui apresentado estará disponível, em forma de projeto, no espaço da revista reservado para download.
[há +1 ano] - Responder

 

[autor] Marcio Ballem De Souza
Nesta página mesmo, acima do Titulo do Artigo, tem o link código-fonte.
[há +1 ano] - Responder
 

Carlos Alberto Bertuol
Obrigado, encontrei o link. Eu sempre uso o Leitor Digital DevMedia no qual nao encontrei o endereco do download.
[há +1 ano] - Responder
 

Carlos Amaral
Olá, Se eu fosse utilizar o banco de dados Postgres ou Oracle como AbstractPersistable do spring geraria uma chave serial no banco ?
[há +1 ano] - Responder

 

[autor] Marcio Ballem De Souza
Olá Carlos Amaral,
sim, será criada uma sequência para as tabelas. A anotação "@GeneratedValue(strategy = GenerationType.AUTO)" da classe "AbstractPersistable" fará isso. O tipo AUTO, cria a geração de ID conforme o banco que você está usando. No caso do Oracle, ele irá identificar que é do tipo SEQUENCE e criará a sequência.

[há +1 ano] - Responder
 

Carlos Amaral
Olá Marcio, sim mas desta forma o auto-increment não será gerenciado pelo banco e sim pelo hibernate, resolvi da seguinte forma: não implementei AbstractPersistable e na classe de modelo:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator="nome_da_sequencia")
@SequenceGenerator(name="nome_da_sequencia", sequenceName="nome_da_sequencia", allocationSize=1)
@Column(name = "id")
private Integer id;

Desta forma o auto-increment é gerenciado pelo banco. Pensei que AbstractPersistable poderia prover esta estratragéia também para bancos como Postgres.

O Spring Data JPA é excelente, estou usando em um projeto pessoal. Outra pergunta, ele gerencia Transações? por exemplo se um método tiver dois persistes de tabelas diferentes, e um deles não funcionar o outro persiste ou é feito um rollback de tudo ?
[há +1 mês] - Responder
 

[autor] Marcio Ballem De Souza
Olá Carlos, ele tem um controle interno sobre as transações sim. Mas nesse caso que você citou vai depender da maneira como você programar essa persistência. É uma caso mais particular, você talvez tenha que criar uma rotina de testes para verificar isso.


[há +1 mês] - Responder
 

Carlos Amaral
Muito obrigado Marcio pelas informações !!
[há +1 mês] - Responder
 

Abel Lazuta
Não é encontrado as classes AbstractPersistable, AuditorAware, AbstractAuditable.

Inclui hibernate, springframework, apachecommons, servlet-2_3-fcs-classfiles e aopalliance.

Falta alguma biblioteca?
[há +1 mês] - Responder

 

[autor] Marcio Ballem De Souza
Olá Abel! O projeto foi montado com base nas dependências do Maven 2. No arquivo pom.xml estão descritas as dependências necessárias.
Essas classes estão incluídas na biblioteca: spring-data-jpa-1.0.2.RELEASE.jar
[há +1 mês] - Responder
 

Abel Lazuta
Posso implementar apenas Auditoria num projeto java web JSF 2, JPA, Hibernate e Spring Security?
[há +1 mês] - Responder

 

[autor] Marcio Ballem De Souza
Olá Abel! Pergunta interessante essa.

Na verdade eu não vou confirmar que pode, porque nunca fiz testes a esse respeito.

Mas acredito que possa sim, desde que você esteja usando o Hibernate com a implementação JPA, e não com SessionFactory.


[há +1 mês] - Responder
 

Rafael Viana
Olá Marcio,

gostaria de saber se o Spring-Data JPA trabalha por "debaixo dos panos" com o Hibernate Envers (http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch15.html) para realizar o projeto de auditoria.
[há +1 mês] - Responder

 

[autor] Marcio Ballem De Souza
Olá Rafael Viana!
Não sei te confirmar isso, mas eu acho que não. Pelo menos não existe nenhuma dependência (jars) do Hibernate Envers quando se usa as classes de auditoria do Spring-data-jpa.
[há +1 mês] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
[Fechar] Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03