Вы находитесь на странице: 1из 10

1

Copyright Jefferson S. Silva Slide 1


POO - Programao Orientada a Objetos
POO Programao
Orientada a Objetos
O Dao Genrico
Jefferson S. Silva
IFET - PI
Copyright Jefferson S. Silva Slide 2
POO - Programao Orientada a Objetos
Dao Genrico
Se fssemos adicionar outra entidade no
sistema, um Produto, por exemplo, como
voc escreveria o ProdutoDao?
Provavelmente, copiaria todo o contedo do
UsuarioDao, substituindo Usuario por
Produto.
Isso porque, com o Hibernate, a lgica de
acesso a dados muito parecida quando
tratamos de entidades diferentes.
2
Copyright Jefferson S. Silva Slide 3
POO - Programao Orientada a Objetos
Dao Genrico
Copiar e colar cdigo nunca legal.
Modificaes futuras tm que ser feitas em
vrias lugares, sempre com a chance de se
esquecer algum.
Seria legal centralizar tudo em um lugar s.
Seria legal no precisar criar um dao
especfico para cada entidade.
Copyright Jefferson S. Silva Slide 4
POO - Programao Orientada a Objetos
Dao Genrico
Vamos fazer uma nica classe Dao que
usa Generics <T> e, portanto, pode
servir a entidades diferentes sem
precisar copiar e colar cdigo.
3
Copyright Jefferson S. Silva Slide 5
POO - Programao Orientada a Objetos
Dao Genrico
Use o Refactor chamado Rename para
renomear a nossa classe UsuarioDao
para Dao.
Essa classe ser depois generalizada
para funcionar com qualquer entidade.
Copyright Jefferson S. Silva Slide 6
POO - Programao Orientada a Objetos
Dao Genrico
Adicionar generics nossa classe:
a) Na assinatura da classe, adicione o tipo
<T> genrico:
public class Dao<T> {
4
Copyright Jefferson S. Silva Slide 7
POO - Programao Orientada a Objetos
Dao Genrico
Vamos adicionar controle de transaes
na nossa Dao. Ela deve ter mtodos
para comear uma transao, fazer
commit e rollback. Alm disso, adicione
um mtodo que verifica se existe uma
transao em aberto e outro para
fechar tudo.
Copyright Jefferson S. Silva Slide 8
POO - Programao Orientada a Objetos
Comear uma transao
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
5
Copyright Jefferson S. Silva Slide 9
POO - Programao Orientada a Objetos
Commit
public void commit() {
this.transaction.commit();
this.transaction = null;
}
Copyright Jefferson S. Silva Slide 10
POO - Programao Orientada a Objetos
Rollback
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
6
Copyright Jefferson S. Silva Slide 11
POO - Programao Orientada a Objetos
Verifica se existe uma transao
em aberto
public boolean hasTransaction() {
return this.transaction != null;
}
Copyright Jefferson S. Silva Slide 12
POO - Programao Orientada a Objetos
Fechar sesso
public void close() {
this.session.close();
}
7
Copyright Jefferson S. Silva Slide 13
POO - Programao Orientada a Objetos
ListaTudo
public List<Object> listaTudo(Class classe) {
return this.session.createCriteria(classe).list();
}
Altere o mtodo listaTudo para receber como
parmetro a classe que ser listada.
Copyright Jefferson S. Silva Slide 14
POO - Programao Orientada a Objetos
Procura
public Object procura(Long id,Class classe) {
return (Object) session.load(classe, id);
}
Altere o mtodo procura para receber tambm
a classe que ser procurada.
8
Copyright Jefferson S. Silva Slide 15
POO - Programao Orientada a Objetos
Salva
public Object salva (Object dto,boolean evict) throws Exception {
try{
this.beginTransaction();
dto = this.session.merge(dto);
this.commit();
if(evict)
this.session.evict(dto);
}catch(Exception e){
this.rollback();
throw new Exception(e.getCause());
}
return dto;
}// retorna o objeto persistente
Copyright Jefferson S. Silva Slide 16
POO - Programao Orientada a Objetos
Remove
public void remove (Object dto)throws Exception {
try{
this.beginTransaction();
this.session.delete(dto);
this.commit();
}catch(Exception e){
this.rollback();
throw new Exception(e.getMessage());
}
}
9
Copyright Jefferson S. Silva Slide 17
POO - Programao Orientada a Objetos
Desafio 1
Crie um mtodo salva que receber como
parmetro apenas o objeto a ser salvo
e por padro ele dever sempre
executar o comando
this.session.evict(dto);
Copyright Jefferson S. Silva Slide 18
POO - Programao Orientada a Objetos
Desafio 2
Crie um mtodo salvaLista que ir salvar
todos os objetos de um ArrayList
passado como parmetro.Essa
operao deve ser protegida por uma
transao.
10
Copyright Jefferson S. Silva Slide 19
POO - Programao Orientada a Objetos
Testando os refactorings
Depois de todos esses passos de
refatorao, nosso sistema deve
continuar funcionando da mesma forma
que antes.
Verifique isso rodando o TestaUsuarios
e vendo se ele ainda funciona.

Вам также может понравиться