Java tutorial
/* Copyright (c) 2010 JOSE, Hrcules S. S. et al. Este arquivo parte do programa SIRCE. SIRCE um software livre; voc pode redistribui-lo e/ou modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como publicada pela Fundao do Software Livre (FSF); na verso 2.1 da Licena. Este programa distribudo na esperana que possa ser til, mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral Menor GNU em portugus para maiores detalhes. Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o nome de "LICENSE.TXT" junto com este programa, se no, acesse o site HSlife no endereco www.hslife.com.br ou escreva para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Para mais informaes sobre o programa SIRCE e seus autores acesse o endereo www.hslife.com.br, pelo e-mail contato@hslife.com.br ou escreva para Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, Marco II - Nova Iguau, RJ, Brasil. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.com.hslife.sirce.persistencia; import br.com.hslife.sirce.hibernate.HibernateUtil; import br.com.hslife.sirce.modelo.Prontuario; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Restrictions; /** * * Classe GenericDao * * Classe responsvel por prover atributos, mtodos e objetos comuns s * classes herdeiras (classes tipo GenericDao) usando a InterfaceDao para prover * os mtodos genricos que sero reconhecidos pela camada acima. * * Esta classe possui os seguintes atributos comuns a todas as classes GenericDao: * - Session session * - Transaction transaction * - Criteria criteria; * - Query query; * - String errorMessage - armazena a mensagem de erro; * - String stackTrace - armazena resultado resultado do mtodo printStackTrace; * * Os seguintes mtodos so comuns a todos * * - save(Object obj) * - update (Object obj) * - delete (Object obj) * - find (Integer id) retorna Object * - find (String campo, Object valor) retorna Object * - find (String campo, Object valor) retorna List<Object> * - findAll() retorna List<Object> * * Os mtodos de busca, no momento, precisam de valores exatos para no * causarem exceo. Atentar ao enviar valores e tratar as excees geradas. * * * @author HSlife */ public class GenericDao { // Atributos protegidos. Utilizados para as classes que herdam de GenericDao protected Session session; protected Transaction transaction; protected Criteria criteria; protected Query query; protected String errorMessage; protected String stackTrace; protected GenericDao() { // construtor protegido para impedir que classes no herdeiras e fora // do pacote de persistncia instancie a classe errorMessage = null; stackTrace = null; } public String getErrorMessage() { return errorMessage; } public String getStackTrace() { return stackTrace; } protected void save(Object obj) { session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); try { session.save(obj); transaction.commit(); } catch (Exception e) { transaction.rollback(); errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } finally { if (session.isOpen()) { session.close(); } } } protected void update(Object obj) { session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); try { session.update(obj); transaction.commit(); } catch (Exception e) { transaction.rollback(); errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } finally { if (session.isOpen()) { session.close(); } } } protected void delete(Object obj) { session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); try { try { session.delete(obj); transaction.commit(); } finally { if (session.isOpen()) { session.close(); } } } catch (Exception e) { transaction.rollback(); errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } } /* * Busca especfica usando resultado id informado */ protected Object find(Class classe, Integer id) { session = HibernateUtil.getSessionFactory().openSession(); Object resultado = null; try { try { resultado = session.get(classe, id); } finally { if (session.isOpen()) { session.close(); } } } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } return resultado; } /* * Busca resultado valor no campo informado * Use em situaes que voc sabe que ir retornar somente um valor. * Mais til em campos nicos(unique) e que no contm repetio de valores */ protected Object find(Class classe, String campo, Object valor) { Object resultado = null; session = HibernateUtil.getSessionFactory().openSession(); try { try { resultado = session.createCriteria(classe).add(Restrictions.eq(campo, valor)).uniqueResult(); } finally { if (session.isOpen()) { session.close(); } } } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } return resultado; } /* * Retorna uma lista de objetos obtidos na busca pelo valor no campo * informado. Caso nenhum objeto seja encontrado resultado mtodo retorna uma lista * vazia (size = 0) */ protected List<Object> findAll(Class classe, String campo, Object valor) { session = HibernateUtil.getSessionFactory().openSession(); List<Object> lista = null; try { try { lista = session.createCriteria(classe).add(Expression.eq(campo, valor)).list(); } finally { if (session.isOpen()) { session.close(); } } } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } return lista; } protected List<Object> findAll(Class classe) { session = HibernateUtil.getSessionFactory().openSession(); List<Object> lista = null; try { try { lista = session.createCriteria(classe).list(); } finally { if (session.isOpen()) { session.close(); } } } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } return lista; } /* * Retorna uma lista de objetos obtidos na busca pelo valor no campo * informado. Caso nenhum objeto seja encontrado resultado mtodo retorna uma lista * vazia (size = 0) */ protected List<Object> search(String classe, String campo, String valor) { session = HibernateUtil.getSessionFactory().openSession(); List<Object> lista = null; try { try { String hql = "from " + classe + " where " + campo + " like '%" + valor + "%'"; lista = session.createQuery(hql).list(); } finally { if (session.isOpen()) { session.close(); } } } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } return lista; } @SuppressWarnings("unchecked") protected List<Object> query(Class classe, String sqlQuery) { session = HibernateUtil.getSessionFactory().openSession(); List lista = null; try { Query queryResult = session.createSQLQuery(sqlQuery).addEntity(classe); lista = queryResult.list(); } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } finally { if (session.isOpen()) { session.close(); } } return lista; } protected Object queryUnique(Class classe, String sqlQuery) { session = HibernateUtil.getSessionFactory().openSession(); Object resultado = null; try { Query queryResult = session.createSQLQuery(sqlQuery).addEntity(classe); resultado = queryResult.uniqueResult(); } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } finally { if (session.isOpen()) { session.close(); } } return resultado; } }