Começar com Hibernate ou JDBC puro?

8 respostas
dannaril

Olá amigos,
sou novo aki no fórum e tbem novato em java.
Estou fazendo um projeto que utiliza conexão com o Banco de dados.
Gostaria de saber se é melhor começar utilizando JDBC puro ou Hibernate,
li em alguns posts que o Hibernate não é recomendado para aplicações qua fazem joins complexos,
mas é justamente isso que minha aplicação deverá fazer.
alguem tem alguma opinião??

8 Respostas

Luca

Olá

Sugiro que comece com JDBC. Porque?

  1. Porque é novato e precisa aprender como se usa JDBC. Isto não lhe consumirá muito tempo.

  2. Para perceber que precisará desenvolver seu próprio framework caseiro de persistência para não precisar repetir código cada vez que acessar o banco de dados.

Mas se seu projeto for profissional, com certeza acabará usando o Hibernate.

[]s
Luca

dannaril

Luca,
mto obrigado pela resposta.
Mas vc falou em projeto profissional, o minha aplicação é um trabalho de iniciação cinentífica
será que se eu usar JDBC vou conseguir futuramente expandir este projeto?? pois estou fazendo
apenas uma parte dele agora. E no caso de manutenção, com o JDBC é fácil??

_Renatu

Olá

Benvindo(a) ao GUJ!!

Como novato, tente sempre aprender a fazer tudo “na unha” antes de partir para qualquer coisa que te facilite. Isso vale pra desenvolver GUI’s, páginas de internet, transações com BD, etc.

Isso é bom para você realmente perceber a necessidade destas ferramentas, e entender o que acontece por trás delas.

Luca

Olá

Estamos falando de 2 coisas que todo mundo deve aprender:

  1. JDBC, que se aprende com facilidade mas que acaba sendo mais trabalhoso de usar

  2. Hibernate, que é muito mais difícil de aprender mas que facilita o desenvolvimento e manutenção

Então estude JDBC e experimente usar. Tente fazer alguma coisa no seu sistema com os PreparedStatements do JDBC na raça.

Mas seu sistema ficará mais fácil de desenvolver e manter usando o Hibernate.

[]s
Luca

raci0nal

Como ele disse anteriormente, com o tempo que você for progredindo no projeto vai perceber que acabou criando um “pseudo-framework” para manipulação dos dados.
Se isso não ocorrer, é sinal que o seu projeto está cheio de codigo repetido.

A partir desse ponto, vai ficar cada vez mais fácil ampliar o projeto, já que as estruturas estarão prontas.

Vejo que a diferença no caso é que o Hibernate já tem uma estrutura pronta e capaz de suprir a maioria das necessidades.

Contudo, creio que conhecer bem JDBC é uma ótima experiência e lhe fará conhecer muitas outras coisas.
Como aparentemente você está em fase de “estudos”, fica como minha recomendação iniciar com JDBC.
Depois você pensa no Hibernate.

Abraços,

Marcos Antonio Campos Jordão’’

thickbarney

galera, aproveitando a carona do nosso amigo dannaril, eu desenvolvi um software pra gestao da qualidade.

eu não usei os preparedStatements nele ainda, mas pretendo e logo após alterar tudo isso para hibernate

o codigo abaixo mostra uma das minhas classes de controle, gostaria q analizassem e me dissessem onde posso melhorar pois ela tem mtos codigos repetidos

package negocio.pessoas;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;

/**
 *
 * @author PC
 */
public class Epi {
    
    // Declaração de Variáveis
    private conexao.Util util;
    private Connection conn;
    private Statement stmt;
    private ResultSet rsEpi;
    private ResultSet rsEntEpi;
    
    /** Creates a new instance of Epi */
    public Epi()
    {
        if (util == null)
            util = conexao.Util.getInstance();
        if (conn == null)
            conn = util.getConexao();
    }
    
    public boolean cadastrarEPI(String pNomeEpi, String pDescEpi, String pNca, String pValCa, int pVUtil, String pTVutil)
    {
        boolean status = false;
        try
        {
            stmt = conn.createStatement(ResultSet.FETCH_UNKNOWN,ResultSet.TYPE_SCROLL_INSENSITIVE);
            String sql = "insert into epi values (nextval('seq_codepi'),'"+pNomeEpi+"','"+pDescEpi+"','"+pNca+"','"+pValCa+"',"+pVUtil+",'"+pTVutil+"')";
            stmt.execute(sql);
            status=true;
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",0);
            status = false;
        }
        return(status);
    }
    
    public boolean cadastrarEntEPI(int pCodCol, String pNomeEpi, String pDescEpi, String pNca, String pValCa, int pVUtil, String pTVutil, String pDtEnt, String pDtProxEnt)
    {
        boolean status = false;
        try
        {
            String insEntEpi = "insert into entEpi values (nextval('seq_codentepi'), "+pCodCol+",'"+pNomeEpi+"','"+pDescEpi+"','"+pNca+"','"+pValCa+"',"+pVUtil+",'"+pTVutil+"','"+pDtEnt+"','"+pDtProxEnt+"')";
            stmt = conn.createStatement(ResultSet.FETCH_UNKNOWN,ResultSet.TYPE_SCROLL_INSENSITIVE);
            stmt.execute(insEntEpi);
            status=true;
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",0);
            status = false;
        }
        return(status);
    }
    
    public boolean atualizarEPI(String pNomeEpi, String pDescEpi, String pNca, String pValCa, int pVUtil, String pTVutil, int pCodEpi)
    {
        boolean status = false;
        try
        {
            String sql = "update epi set nomeEpi='"+pNomeEpi+"',descepi='"+pDescEpi+"', ncaepi='"+pNca+"', valcaepi='"+pValCa+"', vutilepi="+pVUtil+", tipovutilepi='"+pTVutil+"' where codepi ="+pCodEpi+"";
            stmt = conn.createStatement(ResultSet.FETCH_UNKNOWN,ResultSet.TYPE_SCROLL_INSENSITIVE);
            stmt.executeUpdate(sql);
            status=true;
        }
        catch (SQLException e)
        {
            JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",0);
            e.printStackTrace();
            status = false;
        }
        return (status);
    }
    
    public ResultSet consultarTodos()
    {
        rsEpi = null;
        try
        {
            String sql = "select * from epi order by nomeEpi";
            stmt = conn.createStatement(ResultSet.FETCH_UNKNOWN,ResultSet.TYPE_SCROLL_INSENSITIVE);
            rsEpi = stmt.executeQuery(sql);
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",0);
            e.printStackTrace();
        }
        return(rsEpi);
    }
    
    public ResultSet consultarEntEpi(int pCodCol)
    {
        rsEntEpi = null;
        try
        {
            String consEntEpi = "select * from entEpi where codColEntEpi="+pCodCol+" order by dtEntEpi";
            stmt = conn.createStatement(ResultSet.FETCH_UNKNOWN,ResultSet.TYPE_SCROLL_INSENSITIVE);
            rsEntEpi = stmt.executeQuery(consEntEpi);
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",0);
            e.printStackTrace();
        }
        return(rsEntEpi);
    }
    
    public boolean excluirEpi(String pNomeEpi)
    {
        boolean status = false;
        try
        {
            String delEpi = "delete from epi where nomeEpi ='"+pNomeEpi+"'";
            stmt = conn.createStatement(ResultSet.FETCH_UNKNOWN,ResultSet.TYPE_SCROLL_INSENSITIVE);
            stmt.execute(delEpi);
            status = true;
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",0);
            e.printStackTrace();
            status = false;
        }
        return (status);
    }
    
    public void closeStmt() throws SQLException
    {
        if (stmt == null)
        {}
        else
            stmt.close();
    }
    
    public void closeRsEpi() throws SQLException
    {
        if (rsEpi == null)
        {}
        else
            rsEpi.close();
    }
    
    public void closeRsEntEpi() throws SQLException
    {
        if (rsEntEpi == null)
        {}
        else
            rsEntEpi.close();
    }    
            
}

Obrigado pela ajuda !

dannaril

olá galera,
mto obrigado pela força, já me decidi,
vou usar JDBC mesmo… achei melhor aprender um pouco de JDBC
para depois começar a usar hibernate.

mto obrigado,
vlw

raci0nal

É isso ae… boa sorte.

Só uma dica: se vai passar alguma informação, sempre use PreparedStatement :wink:

Criado 12 de novembro de 2007
Ultima resposta 16 de nov. de 2007
Respostas 8
Participantes 5