Aula 2 - Revisão de JPA (Java Persistence API)



Documentos relacionados
Aula 2 - Revisão de JPA (Java Persistence API)

JPA (Java Persistence API) Marcos Kalinowski


Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Mapeamento Lógico/Relacional com JPA

Java Persistence API. Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Persistência de dados com JPA. Hélder Antero Amaral Nunes

JPA: Persistência padronizada em Java

UFG - Instituto de Informática

UFG - Instituto de Informática

Persistência de Dados em Java com JPA e Toplink

Hibernate. Mapeamento O/R Marcio Aguiar Ribeiro

Aula 4. Carlos Eduardo de Carvalho Dantas

Módulo 03. Mapeando Associações/Relacionamentos. Raphaela Galhardo.

Persistindo dados com TopLink no NetBeans

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

HIBERNATE Criando um projeto em Java + Hibernate do zero

Disciplina de Banco de Dados Parte V

UFG - Instituto de Informática

Struts 2 : Projeto e Programação Editora: Ciência Moderna Autor: Antunes Budi Kurniawan Número de páginas: 600

Banco de Dados. Sérgio Luiz Ruivace Cerqueira

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

Persistência e Banco de Dados em Jogos Digitais

Aula 5. Carlos Eduardo de Carvalho Dantas

Java para WEB com Hibernate e Struts 2. Duração 52 horas/aula. Objetvo

1. Domínio dos Atributos

PERSISTÊNCIA EM BANCO DE DADOS: UM ESTUDO PRÁTICO

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

JPA Java Persistence API. Prof. Ramon Chiara

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Banco de Dados Modelo Conceitual, Lógico, Físico, Entidade- Relacionamento (ER) Hélder Nunes

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Oficina. Praça das Três Caixas d Água Porto Velho - RO

HIBERNATE EM APLICAÇÃO JAVA WEB

PLANO DE ENSINO INSTITUTO FEDERAL SUL-RIO-GRANDENSE CAMPUS SAPUCAIA DO SUL PRÓ-REITORIA DE ENSINO

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Resolvendo objeto-relacional impedance mismatch com hibernate

Padrão J2EE Data Access Object (DAO)

Criar uma aplicação JPA2 com EclipseLink e H2

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

MODELAGEM DE DADOS. Banco de Dados I. O uso da análise e do projeto Orientados a Objetos atenuou a separação! Unidade I

FRWTC-235 WORKSHOP ORACLE CERTIFIED JAVA EE 6 JPA DEVELOPER

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

PHP INTEGRAÇÃO COM MYSQL PARTE 1

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

Especificação do 3º Trabalho

Banco de dados 1. Linguagem SQL DDL e DML. Professor: Victor Hugo L. Lopes

Java Persistence Query Language JPQL

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA CIÊNCIA DA COMPUTAÇÃO LINGUAGENS PARA APLICAÇÃO COMERCIAL. Java Peristence API 1.

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44

Orientação a Objetos

Disciplina: Unidade III: Prof.: Período:

Dado: Fatos conhecidos que podem ser registrados e têm um significado implícito. Banco de Dados:

Prof. Marcelo Machado Cunha

Disciplina: Unidade V: Prof.: Período:

Banco de Dados. Aula 1 - Prof. Bruno Moreno 16/08/2011

Introdução. Banco de dados. Por que usar BD? Por que estudar BD? Exemplo de um BD. Conceitos básicos

Principal: construir uma base de dados para produção de informações sobre internações hospitalares;

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

Introdução Banco de Dados

LINGUAGEM DE BANCO DE DADOS

Programação SQL. Introdução

Novatec Editora Ltda. [2014].

Conceitos básicos. Aplicações de banco de dados. Conceitos básicos (cont.) Dado: Um fato, alguma coisa sobre a qual uma inferência é baseada.

Sistemas de Banco de Dados

Comandos DDL. id_modulo = id_m odulo

BANCO DE DADOS PROFESSOR MAURÍCIO - MAURICIO.MELLO@PUCPR.BR AULA 02. O Modelo Entidade-Relacionamento ( MER )

Desmistificando o Hibernate Envers em 10 passos

MC536 Bancos de Dados: Teoria e Prática

Introdução ao SQL. O que é SQL?

Prof.: Clayton Maciel Costa

SISTEMA DE AGENDAMENTO E GERENCIAMENTO DE CONSULTAS CLÍNICAS

Capítulo 22. Associações entre Classes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

NOME SEXO CPF NASCIMENTO SALARIO

ALTO DESEMPENHO UTILIZANDO FRAMEWORK HIBERNATE E PADRÃO JAVA PERSISTENCE API

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Curso de Java. Acesso a banco de dados através do Hibernate. Todos os direitos reservados Klais

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

Capitulo 2. Prof.º Espc. Fábio Margarito Martins de Barros - Tecnologia de banco de dados

SQL - Criação de Tabelas

AULA Uma linguagem de programação orientada a objetos

Curso Superior de Tecnologia em BD

Java e Banco de Dados: JDBC, Hibernate e JPA

Esta aula tem o objetivo de nos orientar durante este período em nossas aulas de Banco de Dados, não tem a pretensão de ser a única fonte de

PROJETO PEDAGÓGICO DE CURSOS

Modelo Relacional. 2. Modelo Relacional (Lógico)

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

RELACIONAMENTOS ENTRE OS OBJETOS NO FRAMEWORK HIBERNATE Elio Lovisi Filho 1 Ronney Moreira de Castro 2 RESUMO

Banco de Dados. Prof. Leonardo Barreto Campos 1

Banco de Dados. StructuredQuery Language- SQL. Prof. Walteno Martins Parreira Jr

A linguagem SQL

Transcrição:

Aula 2 - Revisão de JPA (Java Persistence API) Professor: Ricardo Luis dos Santos IFSUL 2015

Tabela para Revisão Assunto (JPA) Interesse? 1 Vantagens e Desvantagens 4 2 Principais Conceitos 7 3 Anotações 7 4 Operações CRUD sobre entidades 9 5 Mapeamento Objeto Relacional (ORM) 9 6 JPQL (consultas) 9 7 WebServices (REST) 10 2

Tabela para Revisão Assunto (JPA) Interesse? 1 Vantagens e Desvantagens 4 2 Principais Conceitos 7 3 Anotações 7 4 Operações CRUD sobre entidades 9 5 Mapeamento Objeto Relacional (ORM) 9 6 JPQL (consultas) 9 7 WebServices (REST) 10 3

Agenda Introdução Principais Conceitos Implementando uma Entidade Mapeamento Objeto Relacional ORM API EntityManager Linguagem de consulta JPQL Resumo Bibliografia 4

Introdução Mapear o modelo entidade-relacionamento do banco de dados para o modelo de orientação à objetos é extremamente complexo Demanda um grande quantidade tempo dos programadores Dificuldade em mapear herança, agregações e composições de uma forma eficiente Diversos problemas relacionados ao desempenho Redução da produtividade para a escrita de queries SQL 5

Introdução Mapear o modelo entidade-relacionamento do banco de dados para o modelo de orientação à objetos é extremamente complexo Redução da flexibilidade pela utilização de SQL específica a um determinado banco de dados Dilema entre mapear as regras de negócio no banco de dados e na aplicação Embora existam banco de dados orientados à objetos, banco de dados relacionais são o padrão para o mercado 6

Introdução Principal Problema Banco de Dados Relacional Programação Orientada à Objetos 7

Introdução Principal Problema Java Persistence API JPA Banco de Dados Relacional Programação Orientada à Objetos 8

Principais Conceitos Java Persistence API É uma abstração (especificação) em cima do JDBC que torna possível a independência do SQL Utiliza anotações para o mapear os elementos As classes e anotações da API JPA estão no pacote javax.persistence Hibernate TopLink OpenJPA EclipseLink Outros Aplicação JAVA JPA Provedor JPA API JDBC Driver JDBC MySQL PostgreSQL DB2 Oracle Outros 9

Principais Conceitos Principais Componentes Mapeamento Objeto Relacional (ORM Object-Relational Mapping Permite mapear entidades e seus relacionamentos (tabelas) em objetos que podem ser persistidos (Entities) Uma API (EntityManager) Permite desempenhar operações CRUD sobre um banco de dados (Criar, Ler, Atualizar e Remover) Uma linguagem de consulta (JPQL Java Persistence Query Language) Permite recuperar dados com uma linguagem de consulta Orientada à Objetos 10

Principais Conceitos Quando mapeamos objetos para um BD relacional, para persisti-los ou consultá-los o termo entidade deve ser usado Objetos são apenas mantidos em memória Entidades são objetos que são mantidas na memória durante um algum intervalo de tempo e, então persistidas no banco de dados Suportam herança, relacionamentos, entre outros. Desde que mapeados para o gerenciamento do JPA Uma vez persistidas, as entidades podem ser consultadas através da JPQL 11

Principais Conceitos Entidade A classe da entidade representa uma tabela do banco de dados Um objeto da entidade representa uma linha na tabela 12

Implementando uma Entidade Um exemplo de entidade 13

Implementando uma Entidade Um exemplo de entidade Importando os pacotes necessários Indica que objetos dessa classe se tornem persistível no banco de dados @Id indica que o atributo id é nossa chave primária @GeneratedValue diz que queremos que esta chave seja populada pelo banco (auto increment) Indica determinados atributos para uma coluna da tabela 14

Implementando uma Entidade Principais regras A entidade deve ser anotada com @javax.persistence.entity A anotação @javax.persistence.id deve ser usada para criar uma chave primária simples A classe entidade deve possuir um construtor sem argumentos o qual deve ser public ou protected A classe entidade não pode ser um enum ou interface, apenas class é permitido A classe entidade não deve ser final. Nenhum dos métodos ou variáveis de instância pode ser final 15

Implementando uma Entidade Configurações por Exceção Desde que as entidades respeitem as regras, o provedor de persistência pode fazer o mapeamento considerando algumas convenções O nome da classe é mapeado como o nome da tabela Para mudar o nome use a anotação @Table Os nomes dos atributos são mapeados como nome das colunas Para mudar o nome use a anotação @Column Para mapear os tipos de dados, as mesmas regras do JDBC são válidas Por exemplo, String mapeia para VARCHAR (padrão de 255 caracteres) 16

Mapeamento Objeto Relacional ORM Tabelas @Table Pode-se definir propriedades da tabela, como seu nome Por padrão, os nomes das tabelas são criadas com letra maiúscula, assim como nome da classe Ex: @Table(name = livro") 17

Mapeamento Objeto Relacional ORM Tabelas @SecondaryTable Permite que os atributos de uma Entidade (classe) possa ser distribuído entre mais de uma tabela Para várias tabelas secundárias use @SecondaryTables Colunas que não especificarem a sua tabela serão mapeadas para a tabela primária Importante: considere questões de desempenho se optar por utilizar tabelas secundárias 18

Mapeamento Objeto Relacional ORM Tabelas @SecondaryTable 19

Mapeamento Objeto Relacional ORM Chaves Primárias @Id Define uma chave primária Pode ser dos seguintes tipos: Tipos primitivos: byte, int, short, long e char Classes wrapper : Byte, Integer, Short, Long, Character Strings, números e datas: String, BigInteger e Date 20

Mapeamento Objeto Relacional ORM Chaves Primárias @GeneratedValue Define que a coluna tem um valor gerado automaticamente O atributo strategy, que define a estratégia de geração de valores incrementados, possui quatro valores válidos: SEQUENCE e IDENTITY: define uma coluna sequence ou identity, respectivamente. TABLE: instrui o provedor de persistência a usar uma tabela para armazenar a semente da sequencia. É criada uma tabela com duas colunas - uma contendo o nome (arbitrário) e a outra o valor AUTO: a escolha da estratégia para geração do chave é feita automaticamente Ex: @GeneratedValue(strategy = GenerationType.AUTO) 21

Mapeamento Objeto Relacional ORM Atributos @Basic É o tipo de mapeamento mais simples, definindo (através de seus parâmetros): optional: indica se o atributo é obrigatório ou não (se pode ser null na base de dados) fetch: indica se o atributo deve ser carregado sob-demanda (LAZY) ou se carrega-o imediatamente (EAGER) Exemplo: @Basic(optional=true, fetch=fetchtype.lazy) private String descricao; 22

Mapeamento Objeto Relacional ORM Atributos @Column Define grande parte das propriedades comuns à colunas em banco de dados Ex: name, length, unique etc. Algumas outras anotações: @Temporal Usada para definir datas (Date, Time e Timestamp) @Transient Permite que um atributo não seja persistido Lembre-se ainda: anotações de mapeamento de atributo também podem ser usadas no método get 23

Mapeamento Objeto Relacional ORM Associações Classe 1 Classe 2 Unidirecional Classe 1 Classe 2 Bidirecional Classe 1 Classe 2 1 0..* Com Cardinalidade 24

Mapeamento Objeto Relacional ORM Associações Cardinalidade um para um um para um um para muitos um para muitos/muitos para um muitos para um muitos para muitos muitos para muitos Direcionamento Unidirecional Bidirecional Unidirecional Bidirecional Unidirecional Unidirecional Bidirecional As seguintes notações mapeiam estes relacionamentos @OneToOne, @OneToMany, @ManyToOne, e @ManyToMany 25

Mapeamento Objeto Relacional ORM Associações No paradigma OO, o direcionamento define qual classe enxerga qual Em resumo, significa qual tem um atributo de referência para qual Em um relacionamento bidirecional ambas se referem No modelo entidade-relacionamento, existe uma decisão a mais para um relacionamento bidirecional: Quem (qual tabela) fica com a informação de relacionamento (chave estrangeira)? 26

Mapeamento Objeto Relacional ORM Associações (um para um) @OneToOne Indica um relacionamento um para um Só é necessária no relacionamento bidirecional para indicar quem mapeia informações de relacionamento Pode ser usado opcionalmente para definir propriedades de cascade, dentre outras @JoinColumn Elemento opcional que permite definir informações sobre a chave estrangeira (e.g., nome da coluna da chave estrangeira) 27

Mapeamento Objeto Relacional ORM Associações (um para um) 28

Mapeamento Objeto Relacional ORM Associações (um para muitos) O relacionamento um para muitos unidirecional também pode ser mapeado por convenção Basta, para isto, que o tipo da lista seja uma @Entity Opcionalmente pode-se usar @JoinColumn para definições adicionais 29

Mapeamento Objeto Relacional ORM Associações Relacionamentos um para muitos bidirecionais são análogos ao um para um, fazendo o uso de @OneToMany (no lugar de @OneToOne) No relacionamento muitos para muitos bidirecional, como em todo relacionamento bidirecional, deve-se definir quem é o dono do relacionamento Para isto, usa-se o atributo mappedby A tabela de mapeamento pode ser configurada com @JoinTable Esta anotação também pode ser usada no @OneToMany quando existir uma tabela de relacionamento 30

Mapeamento Objeto Relacional ORM Associações Note que @JoinTable fica na entidade dona do relacionamento, ou seja, a que não possui um atributo mapeada por outra 31

Mapeamento Objeto Relacional ORM Relacionamentos (herança) @Inheritance Define a estratégia de mapeamento de herança @DiscriminatorColumn Define o nome da coluna que identifica o tipo ao qual um determinado registro pertence @DiscriminatorValue Define o valor para o tipo da entidade na qual a anotação é utilizada 32

Mapeamento Objeto Relacional ORM Relacionamentos (herança) Existem três estratégias para mapeamento de herança como sempre existe uma adotada por convenção: Uma única tabela por hierarquia (SINGLE_TABLE): a soma dos atributos é distribuída em uma tabela (estratégia padrão) Joined-subclass (JOINED): nesta abordagem, cada entidade da hierarquia, concreta ou abstrata, é mapeada em uma tabela diferente Uma tabela por classe concreta (TABLE_PER_CLASS): esta estratégia mapeia cada entidade concreta para uma tabela separada 33

Mapeamento Objeto Relacional ORM Relacionamentos (herança) 34

API - EntityManager O elemento central da manipulação e consulta da base de dados é feita pela API da classe EntityManager Provê API para criação, remoção, busca e sincronização dos objetos com o banco de dados Além disto, permite a execução de consultas JPQL As consultas JPQL assemelham-se com a SQL, mas operam sobre objetos utilizando, por exemplo, a notação de ponto (.) dentro das consultas 35

API - EntityManager Uma classe Produto 36

API - EntityManager Adicionando um registro 37

API - EntityManager Pesquisando um registro 38

API - EntityManager Atualizando um registro 39

API - EntityManager Deletando um registro 40

Linguagem de consulta JPQL JPA oferece uma linguagem própria para consulta de entidades Portabilidade entre bancos Consultas são representadas e executadas por um objeto Query Exemplo de consulta para buscar todas as entidades no banco: 41

Linguagem de consulta JPQL Como escrever as consultas 42

Linguagem de consulta JPQL Como escrever as consultas Buscar uma única entidade passando dados via parâmetros Operador like 43

Linguagem de consulta JPQL Como escrever as consultas Count() 44

Linguagem de consulta JPQL Como escrever as consultas Subconsultas 45

Linguagem de consulta JPQL Como escrever as consultas Com verificação de intervalo 46

Resumo A Java Persistence API é utilizada para mapear banco de dados relacionais e facilitar o desenvolvimento de código o tornando mais ágil Java Persistence API e seus principais componentes Mapeamento Objeto Relacional (ORM) API (EntityManager) Uma linguagem de consulta (JPQL) Principais anotações ORM da JPA Operações CRUD sobre entidades Consultas formadas por diferentes elementos 47

Resumo A Java Persistence API é utilizada para mapear banco de dados relacionais e facilitar o desenvolvimento de código o tornando mais ágil Java Persistence API e seus principais componentes Mapeamento Objeto Relacional (ORM) API (EntityManager) Uma linguagem de consulta (JPQL) Principais anotações ORM da JPA Operações CRUD sobre entidades Consultas formadas por diferentes elementos 48

Resumo Anotação @Entity @Table @SecondaryTable @Id @GeneratedValue @Column @Transisent @OneToOne @ManyToOne @OneToMany @ManyToMany @Inheritance Descrição Indica que objetos dessa classe se tornem persistível no banco de dados Pode-se definir propriedades da tabela, como seu nome Permite que os atributos de uma Entidade (classe) possa ser distribuído entre mais de uma tabela Define uma chave primária Define que a coluna tem um valor gerado automaticamente Define grande parte das propriedades comuns à colunas em BD Informa que o atributo não será persistido Define um relacionamento um-para-um Define um relacionamento muitos-para-um Define um relacionamento um-para-muitos Define um relacionamento muitos-para-muitos Permite utilizar herança 49

Bibliografia EDSON GONÇALVES. DESENVOLVENDO APLICAÇOES WEB COM JSP, SERVLETS: JAVASERVER FACES, HIBERNATE, EJB 3 PERSISTENCE. Editora CIENCIA MODERNA. HARVEY M. DEITEL, PAUL DEITEL DEITEL. Java: como programar. Edição 8. Editora Pearson Prentice Hall, 2010. GILLIARD CORDEIRO. APLICAÇOES JAVA PARA A WEB COM JSF E JPA. Editora CASA DO CODIGO Mike Keith, Merrick Schincariol. Pro JPA 2: Mastering the Java Persistence API. Editora Apress, 2009. 50

Perguntas?

Atividade Prática Defina Entidades JPA para o seguinte modelo: Cliente - nome: String - cpf: String - rg: String - nascimento: Date - renda: Int - nacionalidade: String 1 0..* Endereco - rua: String - nr: Int - complemento: String - cidade: String - uf: String - pais: String 52

Atividade Prática Criar as operações de CRUD para todas as entidades Realizar operações para inserir dados em cada tabela criada Pelo menos 10 linhas em cada tabela; Realizar operações para atualizar dados nos registros Implementar diferentes consultas 53 Retornar todos os registros de cada entidade Retornar todos os registros que comecem com uma determinada letra informada (para o nome) Retornar todos os endereços de usuários que morem em uma determinada cidade (informada)

Atividade Prática Defina Entidades JPA para o seguinte modelo: Pessoa - nome: String - email: String Aluno Professor - matricula: String - titulacao: String 1 1 0..* 0..* Avaliação Turma 0..* 0..* Disciplina - nome: String - codigo: String - ementa: String 1 - codigo: String - date: Date - nota: float 0..* 1 - ano: int - periodo: int - codigo: String 0..* 54