Java tutorial
/*** Copyright (c) 2010-2014 Hrcules S. S. Jos Este arquivo parte do programa CATU. CATU 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 implicita 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 CATU 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. ***/ package br.com.hslife.catu.dao; import br.com.hslife.catu.db.HibernateUtil; 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.Order; 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 { HibernateUtil.beginTransaction(); HibernateUtil.getSession().save(obj); HibernateUtil.commitTransaction(); HibernateUtil.getSession().flush(); // session.save(obj); //transaction.commit(); } catch (Exception e) { HibernateUtil.rollbackTransaction(); //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 { HibernateUtil.beginTransaction(); HibernateUtil.getSession().update(obj); HibernateUtil.commitTransaction(); //session.update(obj); //transaction.commit(); } catch (Exception e) { HibernateUtil.rollbackTransaction(); //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(); } }*/ HibernateUtil.beginTransaction(); HibernateUtil.getSession().delete(obj); HibernateUtil.commitTransaction(); } catch (Exception e) { HibernateUtil.rollbackTransaction(); //transaction.rollback(); errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } } /* * Busca especfica usando resultado id informado */ protected Object find(Class classe, long id) { //session = HibernateUtil.getSessionFactory().openSession(); Object resultado = null; try { resultado = HibernateUtil.getSession().get(classe, id); /*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 = HibernateUtil.getSession().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 = HibernateUtil.getSession().createCriteria(classe).add(Expression.eq(campo, valor)) .addOrder(Order.asc("id")).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 = HibernateUtil.getSession().createCriteria(classe).addOrder(Order.asc("id")).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 + "%' order by " + campo; lista = HibernateUtil.getSession().createQuery(hql).list(); /*} finally { if (session.isOpen()) { session.close(); } }*/ } catch (Exception e) { errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } return lista; } protected List<Object> query(Class classe, String sqlQuery) { //session = HibernateUtil.getSessionFactory().openSession(); List lista = null; try { Query queryResult = HibernateUtil.getSession().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 = HibernateUtil.getSession().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; } protected void queryNoResult(String sqlQuery) { //session = HibernateUtil.getSessionFactory().openSession(); //transaction = session.beginTransaction(); try { HibernateUtil.beginTransaction(); HibernateUtil.getSession().createSQLQuery(sqlQuery).executeUpdate(); HibernateUtil.commitTransaction(); //session.createSQLQuery(sqlQuery).executeUpdate(); //transaction.commit(); } catch (Exception e) { HibernateUtil.rollbackTransaction(); //transaction.rollback(); errorMessage = e.getMessage(); stackTrace = e.getStackTrace().toString(); e.printStackTrace(); } finally { if (session.isOpen()) { session.close(); } } } }