O documento discute mapeamento objeto-relacional (MOR) usando Java Persistence API (JPA). Ele explica o problema da diferença entre programação orientada a objetos e bancos de dados relacionais e como JPA resolve isso mapeando classes para tabelas de banco de dados. Também descreve características e implementações de JPA como Hibernate e anotações comuns como @Entity e @Table.
1. Programação Orientada a Objetos
Estudo de Frameworks
(Mapeamento Objeto-Relacional em Java)
Objetivo: Identificar os processos de
mapeamento Objeto-Relacional
Prof. Nécio de Lima Veras
2. Problema
POO – Programação Orientada a Objetos
x
BDR – Banco de Dados Relacionais
=
Paradigmas Diferentes
4. Solução
• Também chamado de ORM
– Object Relational Mapping
• Resolve o famoso problema de
“descompasso de impedância”
(impedance mismatch) entre os mundos
objeto e relacional.
• Pode ser usado para gerar as tabelas no
banco de dados ou atualizar as restrições
de integridade.
7. Ou seja...
• O melhor dos dois mundos:
– Modelo Orientado a Objetos;
– Performance e confiabilidade dos bancos de
dados relacionais.
8. Quais suas utilidades?
• O uso de uma solução de mapeamento objeto-
relacional pode solucionar problemas do tipo:
– Como devem ser as classes persistentes?
– Como mapear hierarquias e relações?
– Como recuperar os dados de associações de forma
eficiente ?
– Como gerenciar os recursos necessários: transações,
cache, concorrência ?
9. Porque utilizar?
• Vamos além da padronização da persistência.....!?
– Produtividade
• Elimina “90%” do código SQL da aplicação;
• Reduz o custo de tratamento de transações, erros, entre
outros;
– Manutenibilidade
• Menos linhas de código == melhor manutenção;
• Redução drástica do impacto de mudanças na base de dados;
– Desempenho
• Os recursos da solução de MOR podem melhorar o
desempenho das buscas;
• Sobra tempo para a equipe trabalhar em otimizações do
sistema;
• Só falta agora uma forma padronizada de se fazer esse
mapeamento;
10. Eis que surge o JPA
• O que é?
– É uma especificações da linguagem Java para a
persistência de dados;
– Atua na camada de persistência de dados;
– Define o mapeamento objeto-relacional com base em
anotações;
• Especificada pela JSR-220 (Java Specification Requests)
– Mesma que especificou o EJB 3.0 (Enterprise JavaBeans
3.0);
– Padroniza o mapeamento Objeto-Relacional em Java;
• Solução completa para MOR e persistência de dados:
– Modo declarativo de descrever mapeamento O/R;
– Linguagem de consulta (EJB QL);
– Ferramentas para manipular entidades.
11. JPA: Características
• Portabilidade;
• Persistência transparente:
– Não há necessidade de implementação de interfaces
especiais ou classes base. Usa POJOs – Plain Old Java
Objetcs;
– Atributos são persistidos;
– Não há necessidade de geração de código;
– Suporta tipos definidos pelo usuário
– Controle transparente de restrições de integridade;
• Consulta orientada a objetos ou não:
– EJB QL;
– Consultas dinâmicas e nomeadas;
– SQL Nativo;
12. JPA: Instâncias
• Existem algumas implementações:
– Toplink (oracle);
• É a implementação de referência usada pela Sun
• Mais enxuto e menor que o Hibernate: apenas 2
jars são necessários;
– Hibernate;
– GlassFish;
– Apache OpenJPA;
• Todos implementam a solução ORM de acordo com a
especificação JPA;
• Têm o formato de arquivos *.jar que adicionados ao
classPath da aplicação tornam-se disponíveis;
14. Hibernate
● Mais conhecida, mais tradicional.
● Endereço para Download.
● http://www.hibernate.org
● Na pagina de downloads:
15. Hibernate
• Poderoso framework de mapeamento objeto-
relacional (MOR);
• Framework de Persistência;
• Excelente performance;
• É a mais popular ferramenta de MOR da
atualidade;
• Software Livre e Gratuito;
• Permite o uso de uma grande variedade de
SGBDs;
18. Usando o JPA
• Não esqueça de adicionar os JAR's ao
projeto;
• Mapeamento:
– Classes e interfaces estão no pacote:
• javax.persistence
– Uso anotações – @
• É importante conhecer as anotações mais
comuns e saber usá-las!
19. Anotações Comuns
• @Entity
• @Table
– Por padrão, a JPA assume que todos os campos
persistentes de uma entidade serão
armazenados em uma tabela com o mesmo
nome da entidade.
– @Table(name="FUN")
• @Column
– Por padrão, a JPA assume que o nome de cada
atributo corresponde ao mesmo nome na tabela
– @Column(name="FUN_ID")
• @Id
20. Anotações comuns
• @NamedQuery
– cria consulta nomeada;
– Associada com o @Entity:
@Entity
@NamedQuery(name = "ConsultaPorId", query =
"SELECT f FROM Funcionarios f WHERE f.id =
:id")
public class Funcionario implements Serializable
{
...
}
21. Anotações Comuns
• @GeneratedValue
– geração automática de identificadores;
• @Temporal
– para informações relacionadas ao tempo
(DATE, TIME e TIMESTAMP)
• @OneToOne
@OneToOne(optional=false)
@JoinColumn(name=“ADDRESS_ID”,
unique=true, nullable=false)
Query Address getAddress() {... }
23. Exercícios iniciais
(1)Crie um arquivo básico de configuração para um
banco de dados chamado dbIFPI cujo SGDB é
MySQL e o usuário de conexão seja ifpi com a
senha i@fpi;
(2)Diferencie JPA de Hibernate;
(3)Pesquise e descreva os frameworks Hibernate,
TopLink e OpenJPA;
(4)Dadas as anotações comuns nos slides anteriores,
pesquise outras anotações existentes e descreva-
as.