Para continuar deve ter seguido o 1º post da série, no post anterior criamos nossa classe modelo, e também criamos nosso banco de dados.

Vamos agora implementar o DAO que é muito utilizado, vou disponibilizar uma interface chamada “DaoGenerico” que possui todos métodos necessários para esse projeto, e uma classe “DaoGenericoImpl“ que irá implementar a interface anterior, elas ficaram no pacote utils.

Interface genérica DaoGenerico:

package br.com.cliente.utility;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface DaoGenerico<T, ID extends Serializable> {

    public Class<T> getObjectClass();

    public T save(T objeto);

    public void delete(T objeto);

    public void deleteItem(T objeto);

    public List<T> list();

    public List<T> listCriterio(String subClazz, Map<String, Object> filtrosConsulta, int tipoConsulta);

    public T getById(Serializable id);

    public T getById(Serializable id, boolean lock);

    public List<T> consultaHQL(String consulta);

    public void cancel();
}


Classe genérica DaoGenericoImpl:

package br.com.cliente.utility;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.LockOptions;
import org.hibernate.criterion.Restrictions;

public class DaoGenericoImpl<T, ID extends Serializable> implements DaoGenerico<T, ID> {

    private final Class<T> oClass;

    public DaoGenericoImpl() {
        this.oClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

    @Override
    public Class<T> getObjectClass() {
        return this.oClass;
    }

    @Override
    public T save(T objeto) {
        try {
            Object obj = null;
            HibernateUtility.beginTransaction();
            obj = HibernateUtility.getSession().merge(objeto);
            HibernateUtility.commitTransaction();
            HibernateUtility.closeSession();
            return (T) obj;
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public void delete(T objeto) {
        try {
            HibernateUtility.beginTransaction();
            HibernateUtility.getSession().delete(objeto);
            HibernateUtility.commitTransaction();
            HibernateUtility.closeSession();
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public void deleteItem(T objeto) {
        try {
            HibernateUtility.beginTransaction();
            HibernateUtility.getSession().delete(objeto);
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public List<T> list() {
        try {
            List list = HibernateUtility.getSession().createCriteria(oClass).list();
            //HibernateUtility.closeSession();
            return (List<T>) list;
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public T getById(Serializable id) {
        try {
            return (T) HibernateUtility.getSession().get(oClass, id);
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public T getById(Serializable id, boolean lock) {
        try {
            if (lock) {
                return (T) HibernateUtility.getSession().get(oClass, id, LockOptions.UPGRADE);
            } else {
                return (T) HibernateUtility.getSession().get(oClass, id);
            }
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public List<T> listCriterio(String subClazz, Map<String, Object> filtrosConsulta, int tipoConsulta) {
        List<T> lista = new ArrayList<T>();
        Set entradas = filtrosConsulta.entrySet();

        try {
            Criteria crit = HibernateUtility.getSession().createCriteria(oClass);
            if (subClazz == null) {
                for (Iterator it = entradas.iterator(); it.hasNext();) {
                    Entry object = (Entry) it.next();
                    if (object.getValue() instanceof Enum) {
                        crit.add(Restrictions.eq(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 0) {
                        crit.add(Restrictions.ilike(object.getKey().toString(), "%" + object.getValue() + "%"));
                    } else if (tipoConsulta == 1) {
                        crit.add(Restrictions.eq(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.add(Restrictions.gt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 3) {
                        crit.add(Restrictions.ge(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 4) {
                        crit.add(Restrictions.lt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 5) {
                        crit.add(Restrictions.le(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.add(Restrictions.ne(object.getKey().toString(), object.getValue()));
                    }
                }
            } else {
                for (Iterator it = entradas.iterator(); it.hasNext();) {
                    Entry object = (Entry) it.next();
                    //crit.createCriteria(subClazz).add(Restrictions.ilike(object.getKey().toString(), "%" + object.getValue() + "%"));
                    if (object.getValue() instanceof Enum) {
                    } else if (tipoConsulta == 0) {
                        crit.createCriteria(subClazz).add(Restrictions.ilike(object.getKey().toString(), "%" + object.getValue() + "%"));
                    } else if (tipoConsulta == 1) {
                        crit.createCriteria(subClazz).add(Restrictions.eq(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.createCriteria(subClazz).add(Restrictions.gt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 3) {
                        crit.createCriteria(subClazz).add(Restrictions.ge(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 4) {
                        crit.createCriteria(subClazz).add(Restrictions.lt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 5) {
                        crit.createCriteria(subClazz).add(Restrictions.le(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.createCriteria(subClazz).add(Restrictions.ne(object.getKey().toString(), object.getValue()));
                    }
                }
            }
            crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            crit.setMaxResults(20);
            lista = (List<T>) crit.list();
            //HibernateUtility.closeSession();
            return lista;
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }

    @Override
    public List<T> consultaHQL(String consulta) {
        return (List<T>) HibernateUtility.getSession().createQuery(consulta).list();
    }

    @Override
    public void cancel() {
        HibernateUtility.rollbackTransaction();
        HibernateUtility.closeSession();        
    }
}

Agora crie um novo pacote chamado “daos”, para colocarmos todos nossos arquivos “Daos” que vamos precisar, e nesse caso teremos somente dois arquivos, mas nada impede do projeto crescer não é. Com o pacote criado dentro dele crie um interface chamada “ClienteDao” e uma classe chamada “ClienteDaoImpl”. Vamos incrementar nossa interface e a classe que acabamos de criar, na interface vamos herdar o “DaoGenerico”, ele vai nos pedir dois parâmetros, um sendo o objeto a classe que iremos utilizar e o tipo do id de nossa classe, vamos preencher com Cliente, Long, e no corpo da interface vamos criar um método de consulta com retorno de uma lista de todos registros de clientes no banco.
Interface ClienteDao:


package br.com.cliente.daos;

import br.com.cliente.models.Cliente;
import br.com.cliente.utility.DaoGenerico;
import java.util.List;

//@author Thiago Marques
public interface ClienteDao extends DaoGenerico <Cliente, Long> {

    public List consultar();
}


E na classe “ClienteDaoImpl” vamos herdar o “DaoGenericoImpl” que irá nos pedir novamente o objeto e o tipo do id, e vamos implementar a interface “ClienteDao”, veja que o NetBeans nos dará um aviso para implementar os métodos abstratos de nossa interface, clique, e vamos implementa-lo, vamos utilizar critéria para realizamos essa consulta no banco com o Hibernate, não vou entrar em detalhes pois isso daria mais esse post que meu amigo Altieres de Matos fez vai te dar uma base no assunto(o que estamos fazendo aqui é criando uma lista de clientes, abrindo uma sessão com o banco e passando o tipo do objeto esperado e retornando para onde o método consultar for chamado.),  agora que temos nosso DAO pronto.

Classe ClienteDaoImpl:

package br.com.cliente.daos;

import br.com.cliente.models.Cliente;
import br.com.cliente.utility.DaoGenericoImpl;
import br.com.cliente.utility.HibernateUtility;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;

//@author Thiago Marques
public class ClienteDaoImpl extends DaoGenericoImpl < Cliente , Long > implements ClienteDao {

    @Override
    public List consultar() {
        List lista = new ArrayList();
        Criteria crit = HibernateUtility.getSession().createCriteria(Cliente.class);

        lista = (List) crit.list();
        return lista;
    }
}

Vamos  ao “controller”, onde focaremos nossas regras de negócio , primeiramente crie uma instancia de cliente, um lista de cliente e o DAO ,  crie  os métodos  getters, setters, salvar, editar, excluir para realizarmos as operações básicas do nosso CRUD.

ManagedBean ClienteBean:


package br.com.cliente.controllers;

import br.com.cliente.daos.ClienteDao;
import br.com.cliente.daos.ClienteDaoImpl;
import br.com.cliente.models.Cliente;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;

 // @author Thiago Marques

@ManagedBean
@SessionScoped
public class ClienteBean implements Serializable {

    private Cliente cliente = new Cliente();
    private List clientes = new ArrayList();
    private ClienteDao dao = new ClienteDaoImpl();

    //Creates a new instance of ClienteBean
    public ClienteBean() {

    }

    public void salvar() {

    }

    public void editar() {

    }

    public void excluir() {

    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public List getClientes() {
        return clientes;
    }

    public void setClientes(List clientes) {
        this.clientes = clientes;
    }
}

O próximo passo é implementar nossa view(tela), e os métodos salvar, editar e excluir.

Até o próximo post pessoal.

Anúncios