1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Ajuda em criação do DAO

Criei um DAO e gostaria de saber se esta abordagem é satisfatória para um sistema que a previsão é de uma quantidade elevada de acessos ou se eu terei algum tipo de problema.

Segue as classes envolvidas:

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import br.com.Health.connectionFactory.Hibernate.ConnectionFactoryImpHibernate;
import br.com.Health.connectionFactory.Hibernate.ConnectionFactoryInterfaceHibernate;

public class Teste implements ConnectionFactoryInterfaceHibernate{

    private static ConnectionFactoryImpHibernate con;
    private static List<Object> entidades;

    @Override
    public String returnCaminhoBanco() {
        String caminho = "C:\\dao\\";
        return caminho;
    }
    @Override
    public String returnNomeBanco() {
        String nome = "props.properties";
        return nome;
    }
    @Override
    public List<Object> returnEntidades() {
        entidades = new ArrayList<Object>();
        return entidades;
    }
    public Session getSession(){ 
        con = new ConnectionFactoryImpHibernate(this);
        return con.getSession();
    }
}

Abaixo a Classe que executa os comandos no Banco de Dados

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.Health.connectionFactory.Hibernate.ConnectionFactoryInterfaceHibernate;
import br.com.Health.exception.ConnectionException;

public class DaoHibernate {

    private Session session;
    public void save(ConnectionFactoryInterfaceHibernate connectionFactoryInterfaceHibernate, Object object) throws ConnectionException {
        conectar(connectionFactoryInterfaceHibernate);

        try{
            this.session.saveOrUpdate(object);
            this.session.getTransaction().commit();
        }catch(Exception e){
            System.out.println("Erro ao tentar Salvar");
            e.printStackTrace();
        }finally{
            desconectar();
        }
    }

    //MÉTODOS RESPONSÁVEIS POR SALVAR MAIS DE UM OBJETO AO MESMO TEMPO.
    //É NECESSÁRIO EXECUTAR O beginTransaction(Session session) PARA ABRIR A CONEXÃO E
    //DEPOIS EXECUTAR O commit() PARA CONFIRMAR A OPERAÇÃO.
    public void beginTransaction(ConnectionFactoryInterfaceHibernate connectionFactoryInterfaceHibernate) throws ConnectionException {
        conectar(connectionFactoryInterfaceHibernate);
    }
    public void saveWithTransaction(Object object) {
        try{
            this.session.saveOrUpdate(object);
        }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);
        }
    }
    public void commit() {
        try{
            this.session.getTransaction().commit();

        }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);

        }finally{
            desconectar();
        }
    }

    @SuppressWarnings("rawtypes")
    public List select(ConnectionFactoryInterfaceHibernate connectionFactoryInterfaceHibernate, String query, Object...params) throws ConnectionException{

        Query q = null;
        List<Object> listParam = new ArrayList<Object>();
        List lista = new ArrayList();
        String arg;

        for (Object object : params) {
            listParam.add(object);
        }
        conectar(connectionFactoryInterfaceHibernate);

        try{
            q = this.session.createQuery(query);

            if(listParam.size() == 0){

            }else{
                for (int i = 0; i < listParam.size(); i++) {
                    arg = (String) listParam.get(0);
                    q.setParameter(arg, listParam.get(1));

                    if(listParam.size() >= 2){
                        listParam.remove(0);
                        listParam.remove(0);                
                    }
                    if(listParam.size() == 1){
                        listParam.remove(0);
                    }
                }

            }

            lista = q.list();
        }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);
        }finally{
            desconectar();
        }
        return lista;
    }

    public void delete(ConnectionFactoryInterfaceHibernate connectionFactoryInterfaceHibernate, Object obj) throws ConnectionException {
        conectar(connectionFactoryInterfaceHibernate);

        try{
            this.session.delete(obj);
            this.session.getTransaction().commit();
        }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);
        }finally{
            System.out.println("Fechando Conexão...");
            desconectar();
            System.out.println("Conexão Fechada...");
        }

    }

    public void conectar(ConnectionFactoryInterfaceHibernate connectionFactoryInterfaceHibernate) throws ConnectionException {
        try{
            this.session = connectionFactoryInterfaceHibernate.getSession();
            this.session.beginTransaction();
        }catch(Exception e){
            if(session.isConnected()){
                session.close();
            }
            System.out.println("Erro ao tentar estabelecer a conexão");
            ConnectionException conExc = new ConnectionException();
            throw conExc; 
        }
    }

    public void desconectar() {
        if(session.isOpen()){
            session.disconnect();
            session.close();
        }
    }
}

Abaixo a Classe que criei para testar a conexão.

import java.util.List;

import org.hibernate.Session;

import br.com.Health.connectionFactory.Hibernate.ConnectionFactoryImpHibernate;
import br.com.Health.connectionFactory.Hibernate.ConnectionFactoryInterfaceHibernate;

public class Teste implements ConnectionFactoryInterfaceHibernate{

    private static ConnectionFactoryImpHibernate con;

    @Override
    public String returnCaminhoBanco() {
        String caminho = "C:\\dao\\";
        return caminho;
    }
    @Override
    public String returnNomeBanco() {
        String nome = "props.properties";
        return nome;
    }
    @Override
    public List<Object> returnEntidades() {
        // TODO Auto-generated method stub
        return null;
    }
    public Session getSession(){ 
        con = new ConnectionFactoryImpHibernate(this);
        return con.getSession();
    }
}
  • A única sugestão que eu posso dar seria talvez manter uma conexão aberta quando realizar uma grande quantidade de updates, selects ou saves ao mesmo tempo. Note que você abre e fecha a conexão em todas as transações individuais. Se você conseguir mandar todas as informações ao mesmo tempo, poderia manter uma conexão global aberta :)

    Scoobydoo   17 de abr de 2015
  • Eu tenho o método "saveWithTransaction", seria +- isso mas também com select e delete?

    danilo   17 de abr de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags dao hibernate java orientação-a-objetos ou faça a sua própria pergunta.