Como criar um dao genérico?

Olá, gostaria de saber como posso criar uma DAO genérico para utilizar em meu projeto de estudo aqui em casa. :wink:

Olha um exemplinho ai :


public class DaoGenerico<Clazz> {

    private Class<Clazz> persistentClass;
    private Session session;
    /**
     * Construtor
     * 
     * @param  Class<Clazz> persistentClass
     * @param  Session session
     */
    public DaoGenerico(Class<Clazz> persistentClass, Session session) {
        this.persistentClass = persistentClass;
        this.session = session;
    }
    /**
     * Consulta uma Linha da Tabela Genérica usando get
     *
     * @param  Serializable id
     * @return Clazz
     */
    @SuppressWarnings("unchecked")
    public Clazz get(Serializable id) {
        return (Clazz) session.get(persistentClass, id);
    }
    /**
     * Consulta uma Linha da Tabela Genérica usando load
     *
     * @param  Serializable id
     * @return Clazz
     */
    @SuppressWarnings("unchecked")
    public Clazz load(Serializable id) {
        return (Clazz) session.load(persistentClass, id);
    }
    /**
     * Salva ou Atualiza Dados na Tabela Genérica
     *
     * @param  Clazz
     */
    public void saveOrUpdate(Clazz c) {
        session.saveOrUpdate(c);
    }
    /**
     * Deleta Dados na Tabela Genérica
     *
     * @param  Clazz
     */
    public void delete(Clazz c) {
        session.delete(c);
    }
    /**
     * Consulta Todas Linhas de uma Tabela Genérica em ordem crescente
     *
     * @return List<Clazz>
     */
    public List<Clazz> listaAllIdCrescente() {
        Criteria c = session.createCriteria(persistentClass);
        c.addOrder(Order.asc("id"));
        return c.list();
    }

    /**
     * Consulta Todas Linhas de uma Tabela Genérica em ordem decrescente
     *
     * @return List<Clazz>
     */
    public List<Clazz> listaAllIdDecrescente() {
        Criteria c = session.createCriteria(persistentClass);
        c.addOrder(Order.desc("id"));
        return c.list();
    }

    /**
     * Encerra a conexão da session
     */
    public void close(){
        this.session.close();
    }
}

// e pra usar esse dao generico :

this.daoEspecifico = new DaoGenerico<Classe>(Classe.class,session);

voce vai usar hibernate ou jdbc?

Marcio

este artigo pode dar uma idéia…

se estiver usando hibernate

http://www.hibernate.org/328.html