Vous êtes sur la page 1sur 56

IFPA Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas

Engenharia da Web
- Persistncia com JPA
Prof. Cludio Martins claudiomartins2000@gmail.com

Roteiro da Aula
Aprensentar a tecnologia de persistncia em

Banco de Dados usando JPA


Utilizar o Netbeans para gerar cdigo JPA Desenvolver aplicaes usando JPA

Mapeamento Objeto Relacional (ORM)


Bancos de Dados utilizam tabelas relacionais (linhas x

colunas) Sistemas OO utilizam objetos (instncias x atributos);

O ORM (Mapeamento Objeto Relacional) permite o

mapeamento de entidades e seus relacionamentos (tabelas) em Objetos; Busca facilitar a persistncia de dados;

Mapeamento Objeto Relacional (ORM)

Mecanismos de Persistncia
Como vimos, podemos programar diretamente em

JDBC e mapear em cdigo os mecanismos de persistncia em objetos (CRUD), usando SQL;

Os frameworks de persistncia se apresentam

como mecanismos que simplicam a forma de tratar os objetos, diminuindo o uso de SQL. Persistence API (JPA); Existem vrias implementaes de JPA. Hibernate apenas uma implementao de JPA.

Java prope uma API de referncia chamada Java

O JPA
O JPA oferece um modelo de persistncia

utilizando POJOs para o mapeamento objetorelacional. Desenvolvido para a EJB 3.0, como parte da especificao JSR 220, mas no limitado a EJB; Utiliza anotaes para o mapeamento de entidades; Site:
http://java.sun.com/javaee/technologies/persistence.jsp

Regras bsicas de mapeamento

Entidade na JPA
Entidade (entity) o objeto que pode ser

gravado pelo mecanismo de persistncia


Toda entidade tem de ter um construtor sem

argumentos
Cada atributo deve possuir seu get e set. Toda entidade tem de ter uma chave primria

Entidade em JPA
Uma entidade JPA um POJO anotado

Conceitos bsico 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:

Configurao XML (no arquivo persistence.xml) Anotaes (uso de cdigo anotado com @)

EntityManager Persistence

centraliza a interao com o JPA

Unit define uma unidade de persistencia (do acesso a um banco de dados definido no persistence.xml)
10

JPA Principais Anotaes


@Entity

informa ao JPA que a classe uma entidade e deve ser persistida informa o nome da tabela que ir persistir a entidade marca uma propriedade da classe como chave primria identificador como gerar o id (chave primria) (name=...) informa o nome da coluna que ir persistir o campo (tipo) Data, Hora e Data+Hora no persiste a coluna
11

@Table(name=...) @Id

@GeneratedValue @Column

@Temporal @Transient

Exemplo

Cliente id nome endereco 1 n

Pedido id data valor...

12

Exemplo

13

Exemplo JPA: Relacionamento 1-n

14

Exemplo JPA

15

Gerao de Cdigo JPA em Netbeans

16

Passos no Netbeans

1)Definir a conexo com o banco de dados 2)Gerar as entidades e o arquivo de configurao (persistence.xml) 3)Gerar os controladores (DAO) de persistncia

17

Modelo do Banco
Para o exemplo apresentado neste tutorial, deve

ser criado um banco de dados com as seguintes tabelas, representando uma aplicao para uma transportadora de cargas:

18

Script do Banco (1)


Abra o console do banco e execute os scripts

SQL a seguir.
CREATE TABLE CIDADE ( COD_CIDADE NOME VALOR_FRETE ); CREATE TABLE DESPACHO ( NUMERO_CONTROLE NOME_CLIENTE PESO_CARGA COD_CIDADE VALOR_PAGAR DATA_DESPACHO ); INTEGER PRIMARY KEY, VARCHAR(40), NUMERIC(10,2) INTEGER PRIMARY KEY, VARCHAR(80), NUMERIC(10,2), INTEGER REFERENCES CIDADE, NUMERIC(10,2), DATE

19

Script do Banco (2)


Popule a tabela 'Cidade'
-- POPULAR A TABELA CIDADE INSERT INTO CIDADE VALUES (1,'RIO DE JANEIRO', 1500.0); INSERT INTO CIDADE VALUES (2,'SO PAULO', 1800.0); INSERT INTO CIDADE VALUES (3,'SO LUIZ', 600.0); INSERT INTO CIDADE VALUES (4,'RECIFE', 1200.0); INSERT INTO CIDADE VALUES (5,'SALVADOR', 2000.0);

20

Definio da conexo com o banco de dados

21

Configurando o DRIVER JDBC NO NETBEANS


- Defina o driver JDBC do gerenciador do banco de dados. - Em nosso exemplo, usaremos o H2 Database (verifique em que pasta est localizado este arquivo .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.

22

Configurando o DRIVER JDBC NO NETBEANS


Na caixa de dilogo Novo Driver JDBC clique no boto Adicionar... e selecione o local onde est o arquivo do driver (no nosso caso: h21.3.166.jar). Ao selecionar, clique em Localizar para que o campo Classe do Driver seja preenchido. No campo Nome preencha com o nome do Drive (pode ser H2 Database). Confirme a caixa de dilogo clicando no boto OK.

23

Conectando ao banco de dados


O NetBeans permite a conexo ao banco de dados, facilitando a manipulao para consultas e operaes de atualizao. Na aba Servios clique com o direito do mouse sobre o item Banco de Dados e selecione no menu de contexto o item Nova Conexo.

24

Conectando ao banco de dados (localizando o driver)


Na caixa de dilogo Assistente de nova conexo, em Localizar Driver, selecione o Driver definido anteriormente (o H2 Database). Em seguida, clique em Prximo para a janela de configurao da conexo.

25

Conectando ao banco de dados: configurao de acesso


No campo URL JDBC inforoinforme a localizao (URL) do banco. No campo Nome do Usurio use o usurio que voc adicionou ao criar o banco de dados e em Senha a senha do usurio (no exemplo o usurio o sa e a senha vazia). Marque a opo Lembrar Senha se voc desejar manter a senha durante a execuo do NetBeans. Confirme clicando no boto Prximo, para a janela do esquema do banco.

26

Conectando ao banco de dados: esquema


A ltima etapa a definio do esquema. Escolha o esquema Public. Em seguida, clique em Finalizar e observe na aba Servios a conexo ao banco j estabelecida (abra os itens do esquema PUBLIC para ver as tabelas).

27

Criao do projeto Java (Web)

28

Projeto com JPA


Para usar a tecnologia JPA com o NetBeans, crie

um projeto normalmente (pode ser do tipo Web ou Aplicao).


Em nosso exemplo ser um projeto Web. O driver do banco (neste caso, o H2) dever estar configurado como biblioteca do projeto.

Para o projeto com JPA, o mecanismo escolhido

para implementar a tecnologia JPA o EclipseLink.


Para usar outras implementaes (Hibernate, TopLink, etc), deve-se observar as configuraes especficas para o arquivo persistence.xml e as formas de tratar os mapeamentos.
29

Criando um projeto Web com JPA (1)


Crie o projeto Web escolhe a opo do menu Arquivo Novo, Novo Projeto. No item (Categoria) Java Web, escolha Aplicao Web. No final, clique em Prximo.

30

Criando um projeto Web com JPA (2)


Em seguida, defina o nome do projeto e o local (pasta) onde ficar salvo o projeto. Neste exemplo, o nome do projeto AulaWebJPA. Clique em Prximo.

31

Criando um projeto Web com JPA (3)


Neste passo (3), voc deve escolher o servidor web e o domnio (contexto) da aplicao (assumimos o mesmo nome do projeto). Neste exemplo, usamos o servidor Apache Tomcat 7. Clique em Finalizar. (No necessrio executar o passo 4, pois nenhum framework ser adicionado ao projeto).

32

Estrutura do Projeto Web


O NetBeans cria toda a estrutura do projeto web e o uma pgina JSP de boas vindas (index.jsp).

33

Adicionando o driver JDBC na biblioteca do projeto


Para o projeto manipular banco de dados necessrio acrescentar o arquivo do driver JDBC do banco. Neste caso, optamos pelo banco H2 Database. Selecione no projeto o item Bibliotecas. Com o atalho, escolha uma opo para adicionar o arquivo JDBC (driver) do banco. Neste exemplo, optou-se por adicionar diretamente o JAR/pasta do driver no projeto.

34

Gerao das entidades

35

Criando as classes de entidade do banco


Agora vamos criar as classes de entidade do banco de dados. O NetBeans gera automaticamente o cdigo das classes por meio de engenharia reversa do banco de dados. Com o menu de atalho sobre a pasta Pacotes de cdigo-fonte escolha Novo e Classes de entidade de banco de dados.

36

Escolhendo as tabelas do banco de dados


O passo seguinte selecionar as tabelas que sero mapeadas como classes de entidade do banco de dados. Escolha a conexo de banco de dados (criada anteriormente). Em seguida, clique em Adicionar todos e Prximo.
Escolha a conexo

Clique em Adicionar

37

Neste passo voc define o nome do pacote (neste exemplo: modelo) onde sero geradas as classes. Desmarque as opes Gerar anotaes de consulta e Gerar anotaes JAXB. Deixe marcada a opo Criar unidade de persistncia. Em seguida, clique em Prximo.

Definindo o local das classes e a unidade de persistncia

38

Finalizando o processo de mapeamento


No ltimo passo, possvel definir a classe que mapeia os relacionamentos como associes entre as classes (por padro o NetBeans utiliza a classe interface Collection). Clique em Finalizar.

39

Projeto com as classes entidade JPA


No final do processo, o NetBeans cria as classes de entidade no pacote modelo (1), adiciona as bibliotecas da implementao JPA (EclipseLink) (2) e o arquivo XML com as configuraes de acesso ao banco no arquivo persistence.xml (3).

40

Arquivo persistence.xml

41

Classes Controladoras (DAO)

42

Gerando os Controladores (DAO) das entidades


Depois de criar as entidades, voc pode gerar as classes controladoras do JPA, que corresponde ao padro DAO (Data Access Object), responsvel pelas operaes (mtodos para inserir, alterar, deletar, etc) sobre os objetos entidade. No pacote de cdigo-fonte, no menu de atalho escolha Novo Classes de Controlador JPA de classes de entidade.

43

Em seguida, escolha quais classes de entidade sero gerados as devidas classes de controle (DAO). Clique em Adicionar tudo, em seguida, clique em Prximo.

Definindo os controladores das Classes de Entidade

44

Finalizando Classes de Controle JPA


O prximo passo a escolha do pacote onde ficaro as classes controladoras. No exemplo, escreva modelo.dao (caso no exista o pacote, o NetBeans ir criar para voc). Clique em Finalizar.

45

Cdigo gerado para um Controlador (DAO)

46

Compreendendo o Controlador - EntityManager


O cdigo gerado para um Controlador exige que voc informe um objeto do tipo EntityManagerFactory. Um EntityManagerFactory uma classe interface que fornece o mecanismo para criar (fabricar) objetos do tipo EntityManager. O EntityManager administra o mapeamento entre uma classe de entidade e uma fonte de dados registrado no arquivo persistence.xml. Portanto, voc deve saber qual o nome informado para a unidade de persistncia referenciado no arquivo persistence.xml. No exemplo, o nome informado (gerado pelo NetBeans) AulaWebJPAPU.

47

Testando um Controlador da classe Cidade


O cdigo a seguir mostra como criar um objeto do tipo EntityManagerFactory e como instanciar um controlador (no exemplo o controlador DAO de Cidade). Depois chamar os mtodos disponveis no controlador.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf); // consultar uma cidade com cdigo=1 Cidade c = daoCidade.findCidade(1); System.out.println("Cidade - " + c.getNome() + " FRETE= " + c.getValorfrete()); // mostra a quantidade de cidades System.out.println("total de cidades = " + daoCidade.getCidadeCount());

48

Testando um Controlador da classe Cidade: incluindo uma cidade


Para incluir um objeto entidade usando o controlador, use o mtodo create. O mtodo create necessita apenas de um objeto do tipo do Controlador.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf); // criar um objeto Cidade Cidade cid1 = new Cidade(); cid1.setNome("Bragana"); cid1.setValorfrete(new BigDecimal(550.50)); cid1.setCodcidade(12); daoCidade.create(cid1);

49

Testando um Controlador da classe Cidade: alterando um objeto cidade


Para editar (alterar) um objeto entidade usando o controlador, use o mtodo edit. O mtodo edit necessita apenas de um objeto do tipo do Controlador.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf); // primeiro deve-se consultar (localizar) o objeto Cidade c = daoCidade.findCidade(1); // depois, alterar os valores dos atributos e chama o mtodo edit. c.setValorfrete( new BigDecimal(100) ); daoCidade.edit(c); System.out.println("Cidade - " + c.getNome() + " FRETE= " + c.getValorfrete());

50

Testando um Controlador da classe Cidade: excluindo um objeto cidade


Para excluir (deletar) um objeto entidade usando o controlador, use o mtodo destroy. O mtodo destroy necessita apenas do valor da chave primria (do tipo do atributo identificador do objeto entidade).

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf); // deleta a cidade cujo cdigo = 12 daoCidade.destroy(12);

51

Testando um Controlador da classe Cidade: consultando todos os objetos cidade


Para localizar todos os objetos de entidade usando o controlador, use o mtodo find...Entities, onde () o nome da Entidade. O mtodo find...Entities retorna uma coleo de objetos do tipo da Entidade.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf); // recupera todos os objetos da entidade Cidade List<Cidade> cidades = daoCidade.findCidadeEntities(); for (Cidade cidade : cidades) { System.out.println("cidade = "+cidade.getNome()); }

52

Atividades Prticas (Exerccios)

53

Exerccios (1)

A partir do tutorial presente neste documento realize as seguintes atividade: 1) Crie um banco de dados com a tabela a seguir (estrutura):

Cliente

ID (chave primria) INTEGER NOME - VARCHAR(60) DATA_NASC - DATE SALDO - NUMERIC(10,2)

54

Exerccios (2)

2) Crie um projeto Java no NetBeans. 3) Adicione a biblioteca do driver JDBC do banco (pode ser o H2 Database) 4) Defina a conexo ao banco usando o servio de banco de dados do NetBeans 5) Gere a classe entidade (Cliente) 6) Gere o controlador da entidade (Cliente)

55

Exerccios (usando o controlador DAO)


A partir do cdigo gerado (classes entidade e controlador), crie uma classe de teste com os seguinte mtodos de teste: 1) Mtodo para incluso de um cliente 2) Mtodo para alterar dados de um cliente a partir do valor informado do id do cliente. Alterar o nome e o saldo do cliente. 3) Mtodo para recuperar um cliente a partir do valor informado do id do cliente 4) Mtodo para deletar um cliente a partir do id informado. 5) Mtodo para listar todos os clientes. Mostre (console) o id, o nome e o saldo. 56

Vous aimerez peut-être aussi