A JPA é caracterizada em três áreas:
- Java Persistence API
- Query Language
- Mapeamento Objeto/Relacional
Iremos precisar de algumas libs para este exemplo, no final do post tem um link para você baixar o exemplo completo, com as classes e as libs necessárias.
- Criando a entidade
Iremos criar a nossa classe de entidade chamada Usuario, que irá possuir os seguintes atributos: id, login, password e nome.
Ela nada mais é do que um simples POJO (Plain Old Java Object) com alguns atributos, métodos acessores e não herda de nenhuma classe. Em aplicações coorporativas que utilizam toda a especificação EJB é necessário que essas classes possuam mais características, como serialização por exemplo.
Vamos aos códigos:
Na linha 10 eu informo que esse objeto será uma entidade, marcando com a annotation @Entity.
Na linha 11 informo o nome da tabela, atráves da annotation @Table, usando o atributo name da mesma.
Já na linhas 14 e 15, indico que este atributo será um id (marcado com a annotation @Id) e que a sua estratégia de geração de valores no banco será IDENTITY (para o Oracle usa-se SEQUENCE).
Os demais atributos são marcados com @Column, porém não é necessário fazê-lo, a menos que você quizesse utilizar alguns dos atributos dessa annotation, como name, que indica qual vai ser o nome da coluna no banco.
- Criando a classe UsuarioDAO para persistência
Como este post é apenas um exemplo simples de persistência utilizando JPA, criei apenas uma classe DAO (padrão de projeto Data Access Object) que contém o código principal para a persistência.
Na linha 18 eu crio meu objeto factory, recebendo a instância do provider, que irá encontrar o nome do persistence-unit no arquivo persistence.xml.
Em seguinda, na linha 19 eu crio o objeto EntityManager, que é o principal objeto para a persistência na JPA.
O método inserirUsuario utiliza o objeto EntityTransaction, para transações.
Na linha 35 o objeto eu chamo o método persist do objeto EntityManager, passando a entidade para ser gravada no banco.
Existem vários outros métodos relacionados a persistência, como o find, delete, merge e outros. Aconselho dar uma lida na especificação para conhecer estes métodos, quais seus propósitos e suas funcionalidades.
- Arquivo de configuração (persistence.xml)
Esse é o arquivo de configuração, que configura o nome da unidade de persistência, o tipo de transação, as configurações de banco, o provider, as classes de entidades e etc.
Atenção para a linha 15, essa propriedade informa o tipo de geração das tabelas do banco. Na primeira vez que você rodar o exemplo, o provider irá criar as tabelas no schema exemplojpa.
Se você tentar rodar novamente o exemplo sem comentar ou tirar essa linha, irá gerar um erro informando que já existe uma tabela criada no banco, mas os dados irão ser persistidos. Então ao rodar a primeira vez, comente essa linha ou troque o tipo de geração.
Abaixo você poderá fazer o download do exemplo, com as classes, as libs e o persistence.xml (arquivo de configuração).
Este exemplo foi bastante simples e a JPA é bastante vasta, portanto baixe as especificações e estude mais afundo sobre esse excelente meio de persistência!
Download do exemplo
Screencast excelente sobre JPA
8 comentários:
E ai Rafa, muito legal o artigo, bastante prático para quem quer dar o ponta pé. Estou pensando seriamente de utilizar JPA nos próximos projetos , queria saber se a tecnologia já esta madura, existe algum bug ou impossibilidade no jpa quando os relacionamentos entre as classes são mais complexos ? O pessoal já esta utilizando JPA em larga escala nos projetos ?
Abraços
Oi Tabosa, obrigado pelo elogio, o seu blog também está excelente, espero que o conteúdo do meu chegue próximo do seu. Sobre o uso da JPA, atualmente estou num projeto de grande porte que a utiliza, sem problemas. No blog do Urubatan ele postou recentemente as novidades sobre a JPA anunciadas no Java One.
ta virando moda é fazer blog?!
vou fazer o meu, mas para contar as minhas putarias, pq java no máximo 12 horas por dia :P
P.S.: Num sei quem é o mais bajulador dos dois aí em cima :P
Olá Rafael,
Estou iniciando com JPA se possível gostaria de tirar uma dúvida contigo que tem experiência no assunto. Qual a diferença dos dois tipos de transações JPA e RESOURCE_LOCAL, existe diferença de performance?
grato,
Ezequiel.
Boa Noite Rafael,
Muito bom esse seu artigo... Estou iniciando no JPA e achei bem legal.
Valeu
Ótimo exemplo Rafael.
Parabéns !!!
Obrigado Rafael Muniz e Junior Sousa.
Vejam o que ando escrevendo no endereço www.rafaelcarneiro.com.
Olá Rafael,
Muito bom o post sobre JPA, estava ha tempo procurando um exemplo simples que ensinasse do começo ao fim, Parabéns!
[ ]'s.
at+.
Postar um comentário