Disciplina de Projeto de Banco de Dados Professora: Maria

Propaganda
Disciplina de Projeto de Banco de Dados
Professora: Maria Lencastre
Grupo: José Sandro, Iago Alves, Cristiano Moura, Rennan Lacerda
Respostas do questionário de Hibernate
1. Persistência é quando um objeto (Dados) permanece, mesmo após o término da
execução do programa. A sua importância se deve ao fato de termos a necessidade do
armazenamento confiável e coerente das informações em um sistema de
armazenamento de dados
2. As alternativas básicas são:
a. Dados na memória
b. Dados em arquivos
c. Dados sob controle de um BD
Muitas aplicações requerem necessariamente os serviços de um BD, mas
algumas podem funcionar bem com uma alternativa mais simples
3. A idéia da persistência O/R é reunir as vantagens de se utilizar um modelo
orientado a objetos para a construção de uma aplicação, com a performance e a
confiabilidade dos bancos de dados relacionais. No hibernate, tomamos os nomes dos
atributos das classes básicas, beans, relacionados aos campos da tabela que está
mapeada.
4. O hibernate facilita e muito devido à praticidade na questão tanto da configuração ou
quanto a um estilo de mapeamento, além de fornecer drivers e bibliotecas para a sua
utilização. O tempo de produção de certas classes e o relacionamento com o banco de
dados caiu consideravelmente. A dificuldade está em se habituar ao estilo de
referenciamento(mapeamento) utilizado no .xml ou no annotation.
5. RoundTripping
A noção de roundtripping é a de que a partir de um dos três elementos:
Classes Java
Documento de mapeamento
Banco de Dados
É suficiente para produzir os outros dois
Hbm2dll
Geração do schema do banco de dados com base no mapeamento em xml.
Classe Java necessária
◦ net.sf.hibernate.tool.hbm2ddl.SchemaExport
Problemas de padronização (nome de colunas,tabelas e etc..) com DBA´s
Normalmente usado em abordagens top-down
Hbm2Java
Ferramenta do hibernate para a geração de classes persistentes.
Sua classe principal é:
◦ net.sf.hibernate.tool.hbm2java.CodeGenerator
Suporta duas opções
◦ Output: Seta o diretório para o código gerado
◦ Config: Seta um arquivo de configuração
Deve ser usado para:
Geração de classes POJO a partir de arquivos de mapeamento criados a partir de
abordagens Middle-out de desenvolvimento ou criados pelo Middlegen de uma base
existente
Middlegen
Quando o desenvolvedor tem que trabalhar com um schema existente, uma opção é
gerar o mapeamento a partir do schema existente
Especialmente útil com muitas tabelas
Utiliza-se o Middlegen para gerar um esqueleto do mapeamento que será customizado
à mão
XDoclet
Com um desenvolvimento Top-Down, inicia-se escrevendo classes Java
XDoclet lê os meta-atributos e cria o mapeamento hibernate baseado neles.
Suas tags sempre têm a sintaxe:
@hibernate.tagname (optional) attributes
6. As abordagens são as seguintes:
a. Top-down onde se inicia com um Java domain model existente
Existe a liberdade total em relação ao schema do banco de dados.
É criado um documento de mapeamento (XML)
Utilizando um XML editor ou Xdoclet
Então a ferramenta hbm2ddl gerará o schema do banco de dados
b. Bottom-Up que inicia-se com um banco de dados pré-existente.
Utiliza-se o Middlegen para gerar documentos de mapeamento para o
Hibernate
É executado o hbm2java para gerar o esqueleto das classes POJO
Normalmente será necessário um melhoramento do mapeamento
feito a mão, pois nem todas associações de classe poderão ser
automaticamente mapeadas no banco
c. Middle-Out: Quando nem as classes em java, nem o banco de dados contém
informação suficiente para a completa geração do ORM
Então para gerar o documento de mapeamento do hibernate, serão
necessárias entradas extras do usuário
Utilizando Xdoclet,a informação é provida por atributos Xdoclet embuídos no
código fonte. No caso do Middlegen é provido através da Middlegen GUI
d. Meet in the Middle: Um dos cenários mais complexos, combina a existência
de classes java e de um banco de dados.
Provavelmente utilizar hibernate implicará em mudança em ambos os lados
O documento de mapeamento tem que ser feito à mão
7. P or seis maneiras, são elas:
Navegação do grafo de objetos
Recuperação por identificador
HQL
Utilizando a API Criteria
Query by example
Usando SQL nativo
8.
Imagine essa estrutura ao lado
Código em Java com Sql
String sql = " select sv.id, a.familia, a.especie”+
+“from serVivo sv inner join”+
+“animal a on sv.id = a.id;”
PreparedStatement statment = conexao.prepareStatement(sql);
ResultSet result = statment.executeQuery();
Lis<Animal> lista = new ArrayList<Animal>();
while (result.next()) {
Animal animal = new Animal();
SerVivo ser = new SerVivo();
animal.setId(result.getInt("id"));
animal.setFamilia(result.getString("familia"));
animal.setEspecie(result.getString(“especie”));
lista.add(animal);
}
statment.execute();
statment.close();
9. Ainda com a mesma estrutura a busca com Hibernate
private final Session sessao;
Transaction transacao = null;
public Animais_DAO()
{
this.sessao = Hibernate_Util.getSessao();
}
.
.
.
@Override
public List procurar()
{
Transaction transacao = sessao.beginTransaction();
List lista_animais = sessao.createQuery("from Animal").list();
return lista_animais;
}
Deixando de lado as formas de implementação de orientação a objetos, as consultas com
utilizando o hibernate HQL são muito mais sintéticas e práticas ao contrário do SQL com o
estilo tradicional. O HQL foi projetado para ser simples e poderoso. Nesse exemplo a
referencia da classe mapeada já é sufuciente para retornar os dados no caso do HQL enquanto
a query do SQL é muito maior.
Download