Universidade de Pernambuco Escola Politécnica de Pernambuco 2º

Propaganda
Universidade de Pernambuco
Escola Politécnica de Pernambuco
2º Exercício Escolar – Projeto de Banco de Dados
Tema: Hibernate
Equipe: Ed Prado, Elton Oliveira, Marlon Chalegre, Rodrigo Castro
O que é persistência de dados? Qual a importância da persistência de dados?
O termo persistência de dados consiste na característica dos dados de serem acessíveis além do
tempo de execução das aplicações que os utilizam. Eles ficam armazenados em algum meio que
possibilite sua recuperação posterior. O ato de atribuir essa característica as dados denomina-se
persistir dados. Esta é uma característica fundamental para qualquer aplicação, pois permite, por
exemplo, que uma aplicação interaja com seus usuários mesmo quando a aplicação é fechada e
aberta novamente como um novo processo da máquina.
Dê exemplos de maneiras usadas por aplicações nas mais diversas tecnologias para se
persistir dados.
Dados podem persistir em arquivos de textos, arquivos binários ou banco de dados.
O que é o mapeamento objeto-relacional (ORM)? Como ele é feito no hibernate?
O Mapeamento OR é uma técnica de desenvolvimento que consiste em representar o objeto de
maneira relacional na gravação do banco de dados, e consegue fazer o caminho inverso sem perder
informação.
No hibernate, esse mapeamento é feito através de arquivos XML que descrevem como os objetos da
aplicação devem ser mapeados para o modelo relacional do banco de dados utilizado pela aplicação.
O hibernate também permite que o mapeamento seja feito na própria classe do objeto através do uso
de annotations.
Como o hibernate facilita o trabalho do programador? Quais são as dificuldades? O
hibernate impõe ao programador algum estilo específico de codificação?
O objetivo do Hibernate é diminuir a complexidade entre os programas Java, baseado no modelo
orientado a objeto, que precisam trabalhar com um banco de dados do modelo relacional (presente
na maioria dos SGDBs). Em especial, no desenvolvimento de consultas e atualizações dos dados.
O Hibernate, portanto, facilita a criação de sistemas que desejam utilizar o mapeamento OR, sendo
o Hibernate responsável por realizar o mapeamento reduzindo a quantidade de linhas de códigos
necessárias para realizar tal funcionalidade e facilitando a consulta, inserção e atualização dos dados
no banco.
Como toda ferramenta, a dificuldade de se usar o hibernate é ter que aprender como ele trabalha.
Aprender a descrever o mapeamento de objetos para o modelo relacional, aprender a linguagem
HQL, aprender como instanciar o hibernate, dentre outras atividades mais avançadas.
O hibernate impõe sim um estilo de codificação específico. Ele exige do programador que toda
classe que for ser persistida por ele tenha um construtor vazio e os métodos get e set para todos os
seus atributos.
Quais as principais ferramentas do hibernate e quais são suas funções?
HBM2DLL – Ferramenta utilizada para gerar o schema do banco de dados a partir do arquivo xml
de configuração.
HBM2Java – Ferramenta utilizada para criação de classes que possam persistir em banco de dados.
Middlegen – Ferramenta utilizada para gerar o arquivo de configuração a partir de um schema de
banco de dados pré-definido.
Xdoclet – Ferramenta utilizada para criação dos arquivos de mapeamento a partir de classes préexistentes.
Cite as abordagens de desenvolvimento de aplicações com hibernate e explique cada uma
delas.
Top-down – Nesta abordagem o desenvolvimento do sistemada se da utilizando um Java domain
model. Após o sistema ser desenvolvido utiliza-se as ferramentas Xdoclet e hbm2dll para gerar o
mapeamento das classes e o schema do banco de dados (essas duas ações podem ser realizadas
manualmente).
Bottom-Up – Esta abordagem um banco de dados pré-existente é utilizado. As ferramentas
middlegen e hbm2java são utilizadas para gerar o mapeamento dos objetos para o hibernate e para
gerar o esqueleto das classes java. O resultado obtido através das ferramentas deverá ser melhorado
manualmente.
Middle-Out – Os arquivos de mapeamento do Hibernate são gerados a partir de informações
adicionais fornecidos pelo usuário quando nem as classes e nem o banco de dados existentes
conseguem fornecer informações suficientes.
Meet in the Middle – O método mais complexo. É baseado na pré existência tando de classes como
do banco de dados. Todo o arquivo de configuração do mapeamento deve ser gerado pelo usuário.
De que maneiras através do hibernate pode ser feita a recuperação de objetos?
Há basicamente 6 maneiras distintas de recuperar objetos no Hibernate, a saber: navegando pelo
grafo de objetos, recuperando objetos pelo identificador, utilizando de HQL (Hibernate Query
language – Dialeto SQL para Hibernate, totalmente orientado a objetos), Utilizando a Criteria API
(API simplificada para a recuperação de entidades pela composição de objetos Criterion),
Consultando mediante um exemplo e, por fim, utilizando SQL nativo.
Dê um exemplo código em Java para recuperação de objetos usando SQL, em que
seja necessário um produto cartesiano de pelo menos duas tabelas.
public class Exemplo {
private Connection conn;
public void abrirConexao() throws
SQLException,NamingException,ClassNotFoundException{
if(conn !=null) return;
Class.forName("com.mysql.jdbc.Driver");
conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/exemplo","root","");
}
public Result getDados() throws SQLException, NamingException,
ClassNotFoundException{
try{
abrirConexao();
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(
"SELECT * FROM Pessoas p, Endereco e WHERE p.id = e.id");
return ResultSupport.toResult(result);
}finally{
fecharConexao();
}
}
public void fecharConexao() throws SQLException{
if(conn == null)return;
conn.close();
conn = null;
}
}
Dê um exemplo de recuperação de objetos para o mesmo caso do item anterior, mas
desta vez usando o hibernate. Na sua opinião, qual das duas é a melhor maneira?
public class Exemplo {
public List getDados() {
Session newSession =
HibernateUtil.getSessionFactory().openSession();
Transaction newTransaction = newSession.beginTransaction();
List messages =
List result = newSession.createQuery("from Pessoa p, Endereco
e where p.id = e.id").list();
newTransaction.commit();
newSession.close();
return result;
}
}
É melhor usar o Hibernate porque ele permite que o programador trabalhe em um nível de abstração
mais alto.
Download