Fórum Classe para persistencia geral #399939

28/04/2011

0

Achei que essa classe resolveria meu problema, mas será que resolveria mesmo? Gostaria de estar no Form Escola e gravar,deletar,atualizar e listar somente escola. Se tiver no Form professor, idem para professior. Abaixo minha Interface e minha classe DaoImplementaTudo.
package br.com.prime.dao;

import java.util.List;
import br.com.prime.modelo.*;

public interface DAO<T> {
    public void Inserir(T t);
    public void Deletar(T t);
    public void Atualizar(T t);
    public List<T> lista();
}


import br.com.prime.dao.*;
import br.com.prime.modelo.*;
import br.com.prime.util.*;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class EscolaDao implements DAO{
    
    @Override
    public void Deletar(Object obj) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(obj);
        t.commit();        
    }
    @Override
    public void Atualizar(Object obj) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(obj);
        t.commit();        
    }
    @Override
    public void Inserir(Object obj) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(obj);
        t.commit();
        
    }
    @Override
    public List lista() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Escola").list();
        t.commit();
        return lista;
    }
}

Pjava

Pjava

Responder

Posts

28/04/2011

Davi Costa

cara, já deu uma caminhada, mas pode melhorar.

Da forma que está vc vai criar EscolaDAO, AlunoDAO e terá que sempre implementar os métodos genéricos do crud.

leia atentamente aquele help que te dei sobre generics, em uma outra thread, que eu explico uma forma de passarmos Entity para o DAOGenerico (implementação da interface genérica) que já temos todos os métodos de crud completos. Daí bastaria vc colocar:

public class EscolaDao implements DAO<Escola>{.....

e não teria q sobrescrever a cada entidade sua esses métodos, somente os métodos específicos de cada entidade.


Att Davi
Responder

Gostei + 0

28/04/2011

Pjava

Ficou assim agora minhas classes.
import br.com.prime.modelo.Escola;
import br.com.prime.dao.DAO;
import br.com.prime.dao.EscolaDao;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean
@SessionScoped
public class EscolaControle {
    
    private Escola escola;
    private DataModel listaEscola;
    
    public DataModel getEscolaAtiva(){
        List<Escola> lista = new EscolaDao().list();
        listaEscola = new ListDataModel(lista);
        return listaEscola;
    }
    
    public Escola getEscola() {
        return escola;
    }

    public void setEscola(Escola escola) {
        this.escola = escola;
    }
    
    public String preparInserirEscola(){
        escola = new Escola();
        return "gerenciarEscola";
    }
    public String DeletarEscola(){
        Escola escolatemp = (Escola)(listaEscola.getRowData());
        DAO dao = new EscolaDao();
        dao.Deletar(escolatemp);
        return "index";
    }
    
    public String prepararAlterarEscola(){
        escola = (Escola)(listaEscola.getRowData());
        return "gerenciarEscola";
    }
    
    public String adicionarEscola(){
        DAO dao = new EscolaDao();
        dao.Inserir(escola);
        return "index";        
    }
    public String alterarEscola(){
        DAO dao = new EscolaDao();
        dao.Atualizar(escola);
        return "index";
    }
}

import br.com.prime.dao.*;
import br.com.prime.modelo.*;
import br.com.prime.util.*;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class EscolaDao implements DAO<Escola>{
    
    @Override
    public List<Escola> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Escola").list();
        t.commit();
        return lista;
    }
    @Override
    public void Inserir(Escola escola) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(escola);
        t.commit();        
    }
    @Override
    public void Deletar(Escola escola) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(escola);
        t.commit();
    }
    @Override
    public void Atualizar(Escola escola) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(escola);
        t.commit();            
    }
}
[code]
import java.util.List;
import br.com.prime.modelo.*;

public interface DAO<T> {
    public void Inserir(T t);
    public void Deletar(T t);
    public void Atualizar(T t);
    public List<T> list();
}


Agora só preciso testar isso. Terei que criar um xhtml com os campos e testar. Ainda to meio cru nisso. Esse xhtml não será o definitivo, pois receberei um e colocarei essa lógica nele. Mas eu ainda não fiz as configuraçoes do Hibernate, para conexão com o banco. Já tenho os drivers no meu ClassPath. Eu uso:
PostgreSql, Helios,Java 6, Hibernate/JPA,JSF 2.0 e Primefaces 2.2.1. Precisava acrescentar aí um DataGrid da Prime para carregar as escolas e outros. Isso é só meu começo com a ferramenta.
Responder

Gostei + 0

28/04/2011

Davi Costa

Cara, deu quase no mesmo.
O que estou querendo que vc evite, é ter que codificar todos esses códigos caso vc precise de um AlunoDAO, ProfessorDAO.

Vc vai ter que criar uma classe que implemente essa interface genérica e todos os seus DAO(s)...EScolaDAO e os outros vão extender dessa implementação genérica.

Att Davi
Responder

Gostei + 0

28/04/2011

Pjava

Perdoe a minha ignorancia, mas não entendi direito, Davi, o que vc realmente está falando.
Responder

Gostei + 0

28/04/2011

Robson Teixeira

Veja o que o davi quis dizer   public abstract class AbstractDAO<T extends Object> implements DAO<T>{               @Override
    public void Inserir(T obj) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(obj);
        t.commit();       
    }
    @Override
    public void Deletar(T obj) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(obj);
        t.commit();
    }
    @Override
    public void Atualizar(T obj) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(obj);
        t.commit();           
    }
            @Override
    public List<T> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List<T> lista = session.createQuery("from "+getEntityType().getSimpleName()).list();
        t.commit();
        return lista;
    }
       protected abstract Class getEntityType(); }   public class EscolaDao extends AbstractDAO<Escola>{       protected Class getEntityType(){         return Escola.class;     } }     isso é um exemplo bem tranquilo e mostra claramente o que o davi queria dizer. O método getSimpleName() caso tenha duvida ele retorna o nome da classe no caso de Escola o retorno será uma String escrito "Escola". Da para melhorar mais um poco mas isso fica ao seu criterio.   qualquer coisa e so chamar att  robson Passarella  
Responder

Gostei + 0

29/04/2011

Davi Costa

Exatamente,
o Robson captou o que eu keria te passar,
não postei logo o código para vc refletir um pouc mais e entender realmente
 que deseja que vc compreendesse.
Agora para melhorar ainda mais, seu EscolaDAO vai virar uma interface e depois vc vai criar um EscolaDAOImpl, por exemplo, para vc em EscolaDAO criar seus métodos específicos que fiquem fora do CRUD tradicional,
por exemplo o método recuperaAlunosVeteranos(), esse método é específico de Escola, então só deve existir para essa interface (para esse caso de uso).

Espero ter ajudado, quaisquer dúvidas que possam surgir é só perguntar.

Att Davi
Responder

Gostei + 0

10/05/2011

Dyego Carmo

Funcionou ?

Se sim , por favor feche :)
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar