Você está na página 1de 56

1

IFPA
Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas
Engenharia da Web
- Persistncia com JPA
Prof. Cludio Martins
claudiomartins2000@gmail.com
2
Roteiro da Aula

Arensentar a tecnologia de ersist!ncia em


"anco de Dados usando #PA

$tili%ar o &et'eans ara gerar c(digo #PA

Desenvolver alica)*es usando #PA


3
Mapeamento Objeto Relacional (ORM)

"ancos de Dados utili%am ta'elas relacionais +lin,as -


colunas.

Sistemas // utili%am o'0etos +inst1ncias - atri'utos.2

/ /3M +Maeamento /'0eto 3elacional. ermite o


maeamento de entidades e seus relacionamentos +ta'elas.
em /'0etos2

"usca facilitar a ersist!ncia de dados2


4
Mapeamento Objeto Relacional (ORM)
5
Mecanismos de Persist ncia

Como vimos4 odemos rogramar diretamente em


#D"C e maear em c(digo os mecanismos de
ersist!ncia em o'0etos +C3$D.4 usando S562

/s frame7or8s de ersist!ncia se aresentam


como mecanismos 9ue simlicam a forma de tratar
os o'0etos4 diminuindo o uso de S56.

#ava ro*e uma API de refer!ncia c,amada #ava


Persistence API +#PA.2

:-istem vrias imlementa)*es de #PA.

;i'ernate < aenas uma imlementa)=o de #PA.


6
O JPA

/ #PA oferece um modelo de ersist!ncia


utili%ando P/#/s ara o maeamento o'0eto>
relacional.

Desenvolvido ara a :#" ?.04 como arte da


esecifica)=o #S3 2204 mas n=o < limitado a
:#"2

$tili%a anota)*es ara o maeamento de


entidades2

Site@
http://java.sun.com/javaee/technologies/persistence.jsp
7
Regras bsicas de mapeamento
8
Entidade na JPA

Entidade !entit"# < o o'0eto 9ue ode ser


gravado elo mecanismo de ersist!ncia

Toda entidade tem de ter um construtor sem


argumentos

Cada atri'uto deve ossuir seu get e set.

Toda entidade tem de ter uma c,ave rimria


9
Entidade em JPA

$ma entidade #PA < um P/#/ anotado


10
Conceitos b sico de JPA
As entidades do modelo so POJOs.
POJO um classe java com atributos privados,
construtor vazio e mtodos de acesso gets e sets.
Mapeamento objeto-relacional realizado com:
on!igura"o # $M% &no ar'uivo persistence.(ml)
Anota"*es &uso de c+digo anotado com ,)
-ntit.Manager # centraliza a intera"o com o JPA
Persistence /nit # de!ine uma unidade de
persistencia &do acesso a um banco de dados #
de!inido no persistence.(ml)
11
JPA Principais Anota es
,-ntit. # in!orma ao JPA 'ue a classe uma entidade e deve
ser persistida
,0able&name12...3) # in!orma o nome da tabela 'ue ir4
persistir a entidade
,5d # marca uma propriedade da classe como c6ave prim4ria
# identi!icador
,7enerated8alue # como gerar o id &c6ave prim4ria)
,olumn &name12...3) # in!orma o nome da coluna 'ue ir4
persistir o campo
,0emporal &tipo) # 9ata, :ora e 9ata;:ora
,0ransient # no persiste a coluna
12
Exemplo
Cliente Pedido
n A
id
nome
endereco
id
data
valor...
13
Exemplo
14
Exemplo JPA: Relacionamento 1n
15
Exemplo JPA
16
$era%&o de '(digo JPA em )etbeans
17
Passos no !etbeans
A.Definir a cone-=o com o 'anco de dados
2.Berar as entidades e o ar9uivo de
configura)=o +ersistence.-ml.
?.Berar os controladores +DA/. de
ersist!ncia
18
Modelo do "anco

Para o e-emlo aresentado neste tutorial4 deve


ser criado um 'anco de dados com as seguintes
ta'elas4 reresentando uma alica)=o ara uma
transortadora de cargas@
* )
19
#cript do "anco (1)

A'ra o console do 'anco e e-ecute os scrits


S56 a seguir.
C3:AT: TA"6: CIDAD: +
C/DCCIDAD: I&T:B:3 P3IMA3D E:D4
&/M: FA3C;A3+G0.4
FA6/3CF3:T: &$M:3IC+A042.
.2
C3:AT: TA"6: D:SPAC;/ +
&$M:3/CC/&T3/6: I&T:B:3 P3IMA3D E:D4
&/M:CC6I:&T: FA3C;A3+H0.4
P:S/CCA3BA &$M:3IC+A042.4
C/DCCIDAD: I&T:B:3 3:F:3:&C:S CIDAD:4
FA6/3CPABA3 &$M:3IC+A042.4
DATACD:SPAC;/ DAT:
.2
20
#cript do "anco ($)

Poule a ta'ela ICidadeI


>> P+P,-AR A .A/E-A '01A1E
I&S:3T I&T/ CIDAD: FA6$:S +A4I3I/ D: #A&:I3/I4 AJ00.0.2
I&S:3T I&T/ CIDAD: FA6$:S +24ISK/ PA$6/I4 AH00.0.2
I&S:3T I&T/ CIDAD: FA6$:S +?4ISK/ 6$ILI4 M00.0.2
I&S:3T I&T/ CIDAD: FA6$:S +G4I3:CIF:I4 A200.0.2
I&S:3T I&T/ CIDAD: FA6$:S +J4ISA6FAD/3I4 2000.0.2
21
1e2ini%&o da cone3&o com o banco de
dados
22
Con%i&urando o 'R()ER J'"C !O !E*"EA!#
- Defina o driver JDBC do gerenciador do banco de dados.
> :m nosso e-emlo4 usaremos o ;2 Data'ase +verifi9ue em 9ue
asta est locali%ado este ar9uivo .jar..
Na aba Servios expanda o n do item Banco de dados. Clique com
o direito do mouse sobre o item Drivers e selecione no menu de contexto
o nico item: Novo Driver.
23
Con%i&urando o 'R()ER J'"C !O !E*"EA!#
Na caixa de dilogo Novo Driver JDBC clique no boto Adicionar... e
selecione o local onde est o arquivo do driver no nosso caso: h2-
1.3.166.jar).
!o selecionar" clique em #oca!i"ar$ para que o campo C!asse do
Driver se%a preenc&ido. No campo No#e preenc&a com o nome do
'rive pode ser #$2 Da%abase$(. Con)irme a caixa de dilogo clicando no
boto &'.
24
Conectando ao banco de dados
* Net+eans permite a conexo ao banco de dados" )acilitando a
manipulao para consultas e operaes de atuali,ao.
Na aba Servios clique com o direito do mouse sobre o item
Banco de Dados e selecione no menu de contexto o item Nova
Cone()o.
25
Conectando ao banco de dados (locali+ando o
dri,er)
Na caixa de dilogo Assis%en%e de nova cone()o" em oca!i"ar
Driver" selecione o Driver de)inido anteriormente o -. 'atabase(.
/m seguida" clique em *r+(i#o para a %anela de con)igurao da
conexo.
26
Conectando ao banco de dados: configurao de acesso
No campo ,- JDBC inforoin)orme a locali,ao 012( do banco.
No campo No#e do ,s./rio use o usurio que voc adicionou ao criar o banco de
dados e em Senha a sen&a do usurio no exemplo o usurio 3 o #sa$ e a sen&a 3 va,ia(.
4arque a opo e#brar Senha se voc dese%ar manter a sen&a durante a execuo do
Net+eans. Con)irme clicando no boto *r+(i#o0 para a %anela do esquema do banco.
27
Conectando ao banco de dados: es-uema
! ltima etapa 3 a de)inio do esquema. /scol&a o esquema *.b!ic. /m
seguida" clique em 1ina!i"ar e observe na aba Servios a conexo ao
banco % estabelecida abra os itens do esquema *,B2C para ver as
tabelas(.
28
'ria%&o do projeto Java !Web#
29
Projeto com JPA

Para usar a tecnologia #PA com o &et"eans4 crie


um ro0eto normalmente +ode ser do tio Ne' ou
Alica)=o..

:m nosso e-emlo ser um projeto Web.

/ driver do 'anco +neste caso4 o ;2. dever estar


configurado como 'i'lioteca do ro0eto.

Para o ro0eto com #PA4 o mecanismo escol,ido


ara imlementar a tecnologia #PA < o :clise6in8.

Para usar outras imlementa)*es +;i'ernate4


To6in84 etc.4 deve>se o'servar as configura)*es
esecOficas ara o ar9uivo ersistence.-ml e as
formas de tratar os maeamentos.
30
Criando um projeto .eb com JPA (1)
Crie o pro%eto 5eb escol&e a opo do menu Ar3.ivo 6 Novo" Novo
*roje%o. No item Categoria( Java 4eb" escol&a A5!ica)o 4eb.
No )inal" clique em *r+(i#o.
31
Criando um projeto .eb com JPA ($)
/m seguida" de)ina o nome do pro%eto e o local pasta( onde )icar salvo o
pro%eto.
Neste exemplo" o nome do pro%eto 3 A.!a4ebJ*A. Clique em *r+(i#o.
32
Criando um projeto .eb com JPA (/)
Neste passo 7(" voc deve escol&er o servidor 8eb e o dom9nio contexto(
da aplicao assumimos o mesmo nome do pro%eto(.
Neste exemplo" usamos o servidor A5ache 6o#ca% 7. Clique em
1ina!i"ar. No 3 necessrio executar o passo :" pois nen&um )rame8or;
ser adicionado ao pro%eto(.
33
Estrutura do Projeto .eb
* Net+eans cria toda a estrutura do pro%eto 8eb e o uma pgina <=> de
boas vindas inde(.js5(.
34
Adicionando o dri,er J'"C na biblioteca do
projeto
>ara o pro%eto manipular banco de dados 3 necessrio acrescentar o arquivo
do driver <'+C do banco. Neste caso" optamos pelo banco -. 'atabase.
=elecione no pro%eto o item Bib!io%ecas. Com o atal&o" escol&a uma opo
para adicionar o arquivo <'+C driver( do banco. Neste exemplo" optou?se
por adicionar diretamente o <!1@pasta do driver no pro%eto.
35
$era%&o das entidades
36
Criando as classes de entidade do banco
!gora vamos criar as classes de entidade do banco de dados. * Net+eans
gera automaticamente o cdigo das classes por meio de engen&aria reversa
do banco de dados. Com o menu de atal&o sobre a pasta *aco%es de
c+digo-fon%e escol&a Novo e C!asses de en%idade de banco de
dados.
37
Escol0endo as tabelas do banco de dados
Escolha a cone3&o
'li4ue em Adicionar
* passo seguinte 3 selecionar as tabelas que sero mapeadas como
classes de entidade do banco de dados.
/scol&a a cone()o de banco de dados criada anteriormente(. /m
seguida" clique em Adicionar todos e *r+(i#o.
38
'e%inindo o local das classes e a unidade de
persist ncia
Neste passo voc de)ine o nome do 5aco%e neste exemplo: ##ode!o$( onde
sero geradas as classes. 'esmarque as opes 8erar ano%a9es de
cons.!%a e 8erar ano%a9es JA:B. 'eixe marcada a opo Criar .nidade
de 5ersis%;ncia. /m seguida" clique em *r+(i#o.
39
1inali+ando o processo de mapeamento
No ltimo passo" 3 poss9vel de)inir a classe que mapeia os relacionamentos como
associes entre as classes por padro o Net+eans utili,a a classe inter)ace
Co!!ec%ion(.
Clique em 1ina!i"ar.
40
Projeto com as classes entidade JPA
No )inal do processo" o Net+eans cria as classes de entidade no pacote ##ode!o$
1(" adiciona as bibliotecas da implementao <>! <c!i5sein=( 2( e o arquivo
A42 com as con)iguraes de acesso ao banco no arquivo 5ersis%ence.(#! 3(.
*
5
6
41
Ar-ui,o persistence2xml
42
'lasses 'ontroladoras !1A+#
43
3erando os Controladores ('AO) das entidades
'epois de criar as entidades" voc pode gerar as classes controladoras do <>!" que
corresponde ao padro '!* 'ata !ccess *b%ect(" responsvel pelas operaes
m3todos para inserir" alterar" deletar" etc( sobre os ob%etos entidade.
No pacote de cdigo?)onte" no menu de atal&o escol&a Novo 6 C!asses de
Con%ro!ador J*A de c!asses de en%idade.
44
'e%inindo os controladores das Classes de
Entidade
/m seguida" escol&a quais classes de entidade sero gerados as devidas
classes de controle '!*(. Clique em Adicionar %.do0 em seguida"
clique em *r+(i#o.
45
1inali+ando Classes de Controle JPA
* prximo passo 3 a escol&a do pacote onde )icaro as classes
controladoras. No exemplo" escreva #ode!o.dao caso no exista o
pacote" o Net+eans ir criar para voc(. Clique em 1ina!i"ar.
46
C di&o &erado para um Controlador ('AO)
47
Compreendendo o Controlador Entit4Mana&er
* cdigo gerado para um Controlador exige que voc in)orme um ob%eto do tipo
<n%i%>?anager1ac%or>.
0m <n%i%>?anager1ac%or> 3 uma classe inter)ace que )ornece o mecanismo
para criar )abricar( ob%etos do tipo <n%i%>?anager. * /ntitB4anager administra o
mapeamento entre uma classe de entidade e uma )onte de dados registrado no
arquivo 5ersis%ence.(#!.
>ortanto" voc deve saber qual o nome in)ormado para a unidade de persistncia
re)erenciado no arquivo persistence.xml.
No exemplo" o nome in)ormado gerado pelo Net+eans( 3 A.!a4ebJ*A*,.
48
*estando um Controlador da classe Cidade
* cdigo a seguir mostra como criar um ob%eto do tipo
/ntitB4anagerCactorB e como instanciar um controlador no exemplo o
controlador '!* de Cidade(.
'epois 3 c&amar os m3todos dispon9veis no controlador.
:ntitPManagerFactorP em2 Q Persistence.create:ntitPManagerFactorP+RaulaJPAP,R.2
Cidade#aController daoCidade Q ne7 Cidade#aController+emf.2
SS consultar uma cidade com c(digoQA
Cidade c Q daoCidade.2ind'idade+A.2
SPstem.out.rintln+RCidade > R T c.get&ome+. T R F3:T:Q R T c.getFalorfrete+..2
SS mostra a 9uantidade de cidades
SPstem.out.rintln+Rtotal de cidades Q R T daoCidade.get'idade'ount+..2
49
*estando um Controlador da classe Cidade:
incluindo uma 5cidade6
:ntitPManagerFactorP em2 Q Persistence.create:ntitPManagerFactorP+Raula#PAP$R.2
Cidade#aController daoCidade Q ne7 Cidade#aController+emf.2
SS criar um o'0eto Cidade
Cidade cidA Q ne7 Cidade+.2
cidA.set&ome+R"ragan)aR.2
cidA.setFalorfrete+ne7 "igDecimal+JJ0.J0..2
cidA.setCodcidade+A2.2
daoCidade.create+cidA.2
>ara incluir um ob%eto entidade usando o controlador" use o m3todo
crea%e. * m3todo crea%e necessita apenas de um ob%eto do tipo
do Controlador.
50
*estando um Controlador da classe Cidade:
alterando um objeto 5cidade6
:ntitPManagerFactorP em2 Q Persistence.create:ntitPManagerFactorP+Raula#PAP$R.2
Cidade#aController daoCidade Q ne7 Cidade#aController+emf.2
SS rimeiro deve>se consultar +locali%ar. o o'0eto
Cidade c Q daoCidade.findCidade+A.2

SS deois4 alterar os valores dos atri'utos e c,ama o m<todo edit.
c.setFalorfrete+ ne7 "igDecimal+A00. .2
daoCidade.edit+c.2
SPstem.out.rintln+RCidade > R T c.get&ome+. T R F3:T:Q R T c.getFalorfrete+..2

>ara editar alterar( um ob%eto entidade usando o controlador" use o
m3todo edi%. * m3todo edi% necessita apenas de um ob%eto do tipo
do Controlador.
51
*estando um Controlador da classe Cidade:
excluindo um objeto 5cidade6
:ntitPManagerFactorP em2 Q Persistence.create:ntitPManagerFactorP+Raula#PAP$R.2
Cidade#aController daoCidade Q ne7 Cidade#aController+emf.2
SS deleta a cidade cu0o c(digo Q A2
daoCidade.destro"+A2.2

>ara excluir deletar( um ob%eto entidade usando o controlador" use o
m3todo des%ro>. * m3todo des%ro> necessita apenas do valor da
c&ave primria do tipo do atributo identi)icador do ob%eto entidade(.
52
*estando um Controlador da classe Cidade:
consultando todos os objetos 5cidade6
:ntitPManagerFactorP em2 Q Persistence.create:ntitPManagerFactorP+Raula#PAP$R.2
Cidade#aController daoCidade Q ne7 Cidade#aController+emf.2
SS recuera todos os o'0etos da entidade Cidade
6istUCidadeV cidades Q daoCidade.2ind'idadeEntities+.2
for +Cidade cidade @ cidades. W
SPstem.out.rintln+Rcidade Q RTcidade.get&ome+..2
X

>ara locali,ar todos os ob%etos de entidade usando o controlador"
use o m3todo find...<n%i%ies" onde D( 3 o nome da /ntidade. *
m3todo find...<n%i%ies retorna uma coleo de ob%etos do tipo da
/ntidade.
53
Atividades Prticas !E3erc7cios#
54
Exerc cios (1) 9
A artir do tutorial resente neste documento
reali%e as seguintes atividade@
A. Crie um 'anco de dados com a ta'ela a
seguir +estrutura.@

Cliente

ID +c,ave rimria. Y I&T:B:3

&/M: > FA3C;A3+M0.

DATAC&ASC > DAT:

SA6D/ > &$M:3IC+A042.



55
Exerc cios ($) 9
2. Crie um ro0eto #ava no &et"eans.
?. Adicione a 'i'lioteca do driver #D"C do
'anco +ode ser o ;2 Data'ase.
G. Defina a cone-=o ao 'anco usando o
servi)o de 'anco de dados do &et"eans
J. Bere a classe entidade +Cliente.
M. Bere o controlador da entidade +Cliente.
56
Exerc cios (usando o controlador 'AO) 9
A artir do c(digo gerado +classes entidade e controlador.4
crie uma classe de teste com os seguinte m<todos de
teste@
A. M<todo ara inclus=o de um cliente
2. M<todo ara alterar dados de um cliente a artir do
valor informado do Zid[ do cliente. Alterar o nome e o
saldo do cliente.
?. M<todo ara recuerar um cliente a artir do valor
informado do Zid[ do cliente
G. M<todo ara deletar um cliente a artir do Zid[
informado.
J. M<todo ara listar todos os clientes. Mostre +console.
o id4 o nome e o saldo.

Você também pode gostar