persistência com jpa usando o netbeans 7

56
1 IFPA Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Engenharia da Web - Persistência com JPA Prof. Cláudio Martins [email protected]

Upload: bruno-silva

Post on 05-Aug-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Persistência com JPA usando o NetBeans 7

1

IFPACurso de Tecnologia em Análise e Desenvolvimento de Sistemas

Engenharia da Web

- Persistência com JPA

Prof. Cláudio [email protected]

Page 2: Persistência com JPA usando o NetBeans 7

2

Roteiro da Aula

●Aprensentar a tecnologia de persistência em Banco de Dados usando JPA

●Utilizar o Netbeans para gerar código JPA

●Desenvolver aplicações usando JPA

Page 3: Persistência com JPA usando o NetBeans 7

3

Mapeamento Objeto Relacional (ORM)● Bancos de Dados utilizam tabelas relacionais (linhas x

colunas)● Sistemas OO utilizam objetos (instâncias x atributos);

● O ORM (Mapeamento Objeto Relacional) permite o mapeamento de entidades e seus relacionamentos (tabelas) em Objetos;

● Busca facilitar a persistência de dados;

Page 4: Persistência com JPA usando o NetBeans 7

4

Mapeamento Objeto Relacional (ORM)

Page 5: Persistência com JPA usando o NetBeans 7

5

Mecanismos de Persist nciaê

● Como vimos, podemos programar diretamente em JDBC e mapear em código os mecanismos de persistência em objetos (CRUD), usando SQL;

● Os frameworks de persistência se apresentam como mecanismos que simplicam a forma de tratar os objetos, diminuindo o uso de SQL.

● Java propõe uma API de referência chamada Java Persistence API (JPA);● Existem várias implementações de JPA.● Hibernate é apenas uma implementação de JPA.

Page 6: Persistência com JPA usando o NetBeans 7

6

O JPA

●O JPA oferece um modelo de persistência utilizando POJOs para o mapeamento objeto-relacional.

●Desenvolvido para a EJB 3.0, como parte da especificação JSR 220, mas não é limitado a EJB;

●Utiliza anotações para o mapeamento de entidades;

●Site: http://java.sun.com/javaee/technologies/persistence.jsp

Page 7: Persistência com JPA usando o NetBeans 7

7

Regras básicas de mapeamento

Page 8: Persistência com JPA usando o NetBeans 7

8

Entidade na JPA

●Entidade (entity) é o objeto que pode ser gravado pelo mecanismo de persistência

●Toda entidade tem de ter um construtor sem argumentos

●Cada atributo deve possuir seu get e set.

●Toda entidade tem de ter uma chave primária

Page 9: Persistência com JPA usando o NetBeans 7

9

Entidade em JPA

●Uma entidade JPA é um POJO anotado

Page 10: Persistência com JPA usando o NetBeans 7

10

Conceitos b sico de JPAá

As entidades do modelo são POJOs. POJO é um classe java com atributos privados,

construtor vazio e métodos de acesso gets e sets.

Mapeamento objeto-relacional é realizado com:◦ Configuração – XML (no arquivo persistence.xml)◦ Anotações (uso de código anotado com @)

EntityManager – centraliza a interação com o JPAPersistence Unit – define uma unidade de

persistencia (do acesso a um banco de dados – definido no persistence.xml)

Page 11: Persistência com JPA usando o NetBeans 7

11

JPA – Principais Anota esçõ@Entity – informa ao JPA que a classe é uma entidade e deve

ser persistida@Table(name=“...”) – informa o nome da tabela que irá

persistir a entidade@Id – marca uma propriedade da classe como chave primária

– identificador @GeneratedValue – como gerar o id (chave primária)@Column (name=“...”) – informa o nome da coluna que irá

persistir o campo@Temporal (tipo) – Data, Hora e Data+Hora@Transient – não persiste a coluna

Page 12: Persistência com JPA usando o NetBeans 7

12

Exemplo

Cliente Pedido

n1idnomeendereco

iddatavalor...

Page 13: Persistência com JPA usando o NetBeans 7

13

Exemplo

Page 14: Persistência com JPA usando o NetBeans 7

14

Exemplo JPA: Relacionamento 1-n

Page 15: Persistência com JPA usando o NetBeans 7

15

Exemplo JPA

Page 16: Persistência com JPA usando o NetBeans 7

16

Geração de Código JPA em Netbeans

Page 17: Persistência com JPA usando o NetBeans 7

17

Passos no Netbeans

1)Definir a conexão com o banco de dados

2)Gerar as entidades e o arquivo de configuração (persistence.xml)

3)Gerar os controladores (DAO) de persistência

Page 18: Persistência com JPA usando o NetBeans 7

18

Modelo do Banco

● Para o exemplo apresentado neste tutorial, deve ser criado um banco de dados com as seguintes tabelas, representando uma aplicação para uma transportadora de cargas:

1N

Page 19: Persistência com JPA usando o NetBeans 7

19

Script do Banco (1)

●Abra o console do banco e execute os scripts SQL a seguir.

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

Page 20: Persistência com JPA usando o NetBeans 7

20

Script do Banco (2)

●Popule a tabela 'Cidade'

-- POPULAR A TABELA CIDADEINSERT INTO CIDADE VALUES (1,'RIO DE JANEIRO', 1500.0);INSERT INTO CIDADE VALUES (2,'SÃO PAULO', 1800.0);INSERT INTO CIDADE VALUES (3,'SÃO LUIZ', 600.0);INSERT INTO CIDADE VALUES (4,'RECIFE', 1200.0);INSERT INTO CIDADE VALUES (5,'SALVADOR', 2000.0);

Page 21: Persistência com JPA usando o NetBeans 7

21

Definição da conexão com o banco de dados

Page 22: Persistência com JPA usando o NetBeans 7

22

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 Serviços 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.

Page 23: Persistência com JPA usando o NetBeans 7

23

Configurando o DRIVER JDBC NO NETBEANS

Na caixa de diálogo Novo Driver JDBC clique no botão Adicionar... e selecione o local onde está o arquivo do driver (no nosso caso: h2-1.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 diálogo clicando no botão OK.

Page 24: Persistência com JPA usando o NetBeans 7

24

Conectando ao banco de dados

O NetBeans permite a conexão ao banco de dados, facilitando a manipulação para consultas e operações de atualização. Na aba Serviços clique com o direito do mouse sobre o item Banco de Dados e selecione no menu de contexto o item Nova Conexão.

Page 25: Persistência com JPA usando o NetBeans 7

25

Conectando ao banco de dados (localizando o driver)

Na caixa de diálogo Assistente de nova conexão, em Localizar Driver, selecione o Driver definido anteriormente (o H2 Database). Em seguida, clique em Próximo para a janela de configuração da conexão.

Page 26: Persistência com JPA usando o NetBeans 7

26

Conectando ao banco de dados: configuração de acessoNo campo URL JDBC inforoinforme a localização (URL) do banco.No campo Nome do Usuário use o usuário que você adicionou ao criar o banco de dados e em Senha a senha do usuário (no exemplo o usuário é o “sa” e a senha é vazia).Marque a opção Lembrar Senha se você desejar manter a senha durante a execução do NetBeans. Confirme clicando no botão Próximo, para a janela do esquema do banco.

Page 27: Persistência com JPA usando o NetBeans 7

27

Conectando ao banco de dados: esquema

A última etapa é a definição do esquema. Escolha o esquema Public. Em seguida, clique em Finalizar e observe na aba Serviços a conexão ao banco já estabelecida (abra os itens do esquema PUBLIC para ver as tabelas).

Page 28: Persistência com JPA usando o NetBeans 7

28

Criação do projeto Java (Web)

Page 29: Persistência com JPA usando o NetBeans 7

29

Projeto com JPA

● Para usar a tecnologia JPA com o NetBeans, crie um projeto normalmente (pode ser do tipo Web ou Aplicação). ● 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 implementações (Hibernate,

TopLink, etc), deve-se observar as configurações específicas para o arquivo persistence.xml e as formas de tratar os mapeamentos.

Page 30: Persistência com JPA usando o NetBeans 7

30

Criando um projeto Web com JPA (1)

Crie o projeto Web escolhe a opção do menu Arquivo – Novo, Novo Projeto. No item (Categoria) Java Web, escolha Aplicação Web.No final, clique em Próximo.

Page 31: Persistência com JPA usando o NetBeans 7

31

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 Próximo.

Page 32: Persistência com JPA usando o NetBeans 7

32

Criando um projeto Web com JPA (3)

Neste passo (3), você deve escolher o servidor web e o domínio (contexto) da aplicação (assumimos o mesmo nome do projeto). Neste exemplo, usamos o servidor Apache Tomcat 7. Clique em Finalizar. (Não é necessário executar o passo 4, pois nenhum framework será adicionado ao projeto).

Page 33: Persistência com JPA usando o NetBeans 7

33

Estrutura do Projeto Web

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

Page 34: Persistência com JPA usando o NetBeans 7

34

Adicionando o driver JDBC na biblioteca do projeto

Para o projeto manipular banco de dados é necessário 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 opção para adicionar o arquivo JDBC (driver) do banco. Neste exemplo, optou-se por adicionar diretamente o JAR/pasta do driver no projeto.

Page 35: Persistência com JPA usando o NetBeans 7

35

Geração das entidades

Page 36: Persistência com JPA usando o NetBeans 7

36

Criando as classes de entidade do banco

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

Page 37: Persistência com JPA usando o NetBeans 7

37

Escolhendo as tabelas do banco de dados

Escolha a conexão

Clique em Adicionar

O passo seguinte é selecionar as tabelas que serão mapeadas como classes de entidade do banco de dados. Escolha a conexão de banco de dados (criada anteriormente). Em seguida, clique em Adicionar todos e Próximo.

Page 38: Persistência com JPA usando o NetBeans 7

38

Definindo o local das classes e a unidade de persist nciaê

Neste passo você define o nome do pacote (neste exemplo: “modelo”) onde serão geradas as classes. Desmarque as opções Gerar anotações de consulta e Gerar anotações JAXB. Deixe marcada a opção Criar unidade de persistência. Em seguida, clique em Próximo.

Page 39: Persistência com JPA usando o NetBeans 7

39

Finalizando o processo de mapeamento

No último passo, é possível definir a classe que mapeia os relacionamentos como associções entre as classes (por padrão o NetBeans utiliza a classe interface Collection).Clique em Finalizar.

Page 40: Persistência com JPA usando o NetBeans 7

40

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 implementação JPA (EclipseLink) (2) e o arquivo XML com as configurações de acesso ao banco no arquivo persistence.xml (3).

1

2

3

Page 41: Persistência com JPA usando o NetBeans 7

41

Arquivo persistence.xml

Page 42: Persistência com JPA usando o NetBeans 7

42

Classes Controladoras (DAO)

Page 43: Persistência com JPA usando o NetBeans 7

43

Gerando os Controladores (DAO) das entidades

Depois de criar as entidades, você pode gerar as classes controladoras do JPA, que corresponde ao padrão DAO (Data Access Object), responsável pelas operações (métodos para inserir, alterar, deletar, etc) sobre os objetos entidade.No pacote de código-fonte, no menu de atalho escolha Novo – Classes de Controlador JPA de classes de entidade.

Page 44: Persistência com JPA usando o NetBeans 7

44

Definindo os controladores das Classes de Entidade

Em seguida, escolha quais classes de entidade serão gerados as devidas classes de controle (DAO). Clique em Adicionar tudo, em seguida, clique em Próximo.

Page 45: Persistência com JPA usando o NetBeans 7

45

Finalizando – Classes de Controle JPA

O próximo passo é a escolha do pacote onde ficarão as classes controladoras. No exemplo, escreva modelo.dao (caso não exista o pacote, o NetBeans irá criar para você). Clique em Finalizar.

Page 46: Persistência com JPA usando o NetBeans 7

46

C digo gerado para um Controlador (DAO)ó

Page 47: Persistência com JPA usando o NetBeans 7

47

Compreendendo o Controlador - EntityManager

O código 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 persistência referenciado no arquivo persistence.xml.No exemplo, o nome informado (gerado pelo NetBeans) é AulaWebJPAPU.

Page 48: Persistência com JPA usando o NetBeans 7

48

Testando um Controlador da classe Cidade

O código 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 métodos disponíveis no controlador.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf);

// consultar uma cidade com código=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());

Page 49: Persistência com JPA usando o NetBeans 7

49

Testando um Controlador da classe Cidade: incluindo uma “cidade”

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf);

// criar um objeto Cidade Cidade cid1 = new Cidade(); cid1.setNome("Bragança"); cid1.setValorfrete(new BigDecimal(550.50)); cid1.setCodcidade(12); daoCidade.create(cid1);

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

Page 50: Persistência com JPA usando o NetBeans 7

50

Testando um Controlador da classe Cidade: alterando um objeto “cidade”

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 método edit. c.setValorfrete( new BigDecimal(100) ); daoCidade.edit(c); System.out.println("Cidade - " + c.getNome() + " FRETE= " + c.getValorfrete());

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

Page 51: Persistência com JPA usando o NetBeans 7

51

Testando um Controlador da classe Cidade: excluindo um objeto “cidade”

EntityManagerFactory emf = Persistence.createEntityManagerFactory("aulaJPAPU"); CidadeJpaController daoCidade = new CidadeJpaController(emf);

// deleta a cidade cujo código = 12 daoCidade.destroy(12);

Para excluir (deletar) um objeto entidade usando o controlador, use o método destroy. O método destroy necessita apenas do valor da chave primária (do tipo do atributo identificador do objeto entidade).

Page 52: Persistência com JPA usando o NetBeans 7

52

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

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()); }

Para localizar todos os objetos de entidade usando o controlador, use o método find...Entities, onde (…) é o nome da Entidade. O método find...Entities retorna uma coleção de objetos do tipo da Entidade.

Page 53: Persistência com JPA usando o NetBeans 7

53

Atividades Práticas (Exercícios)

Page 54: Persistência com JPA usando o NetBeans 7

54

Exerc cios (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 primária) – INTEGER– NOME - VARCHAR(60)– DATA_NASC - DATE– SALDO - NUMERIC(10,2)

Page 55: Persistência com JPA usando o NetBeans 7

55

Exerc cios (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 conexão ao banco usando o serviço de banco de dados do NetBeans

5) Gere a classe entidade (Cliente)

6) Gere o controlador da entidade (Cliente)

Page 56: Persistência com JPA usando o NetBeans 7

56

Exerc cios (usando o controlador DAO)íA partir do código gerado (classes entidade e controlador), crie uma classe de teste com os seguinte métodos de teste:

1) Método para inclusão de um cliente

2) Método para alterar dados de um cliente a partir do valor informado do “id” do cliente. Alterar o nome e o saldo do cliente.

3) Método para recuperar um cliente a partir do valor informado do “id” do cliente

4) Método para deletar um cliente a partir do “id” informado.

5) Método para listar todos os clientes. Mostre (console) o id, o nome e o saldo.