[quote=mateusviccari]Pessoal, gostaria de saber qual é o melhor jeito de se trabalhar com banco de dados em plicações java, na faculdade aprendi somente usando o hibernate, porém ja ouvi comentários que ele deixa o programa mais lento do que fazer as instruções sql direto no java.
Eu pessoalmente prefiro fazer o sql direto no java, por ex.: quando o programa abre ele faz um select e poe os dados numa JTable, aí nos botões Salvar, Alterar e Excluir eu faço os Inserts, updates e deletes…
Gostaria de saber se alguém aprova essa técnica, ou se recomenda algum outro método ágil de acesso ao banco, lembrando que minha preferência é a agilidade do sistema.[/quote]
Assim, geralmente quem dá esse tipo de resposta “Hibernate é lento. Ponto” não tá pensando muito bem no que tá falando.
De fato, utilizar um framework de persistência, seja ele qual for, acrescenta sim um overhead na aplicação. Talvez para aplicações pequenas o custo não vale a pena. Mas eu duvido muito que alguém consiga fazer um grande sistema sem uma boa camada de persitência, esrevendo consulta por consulta. Isso, porque na camada de persistência você pode aplicar diversas estratégias que economizam comunicação com o banco de dados e recursos.
Por exemplo, cedo ou tarde você vai precisar gerenciar suas conexões. Se para cada query do sistema você abrir uma conexão é bem possível que você vai derrubar seu SGBD, assim, você vai precisar de um pool de conexões. Ou vai usar um pronto ou escrever seu próprio pool. Mas o fato é que você vai usar um.
Geralmente, grandes sistemas precisam de uma infinidade de CRUD’s para alimentar o banco de dados. Quando você chegar no 3o CRUD você já vai ficar de saco cheio de escrever sempre o mesmo código. Vai refatorar e refatorar até chegar em alguma solução que de alguma forma mapeia classes para tabelas e depois propriedades para colunas.
Enfim, fazer uma tela de CRUD com JDBC puro é uma coisa, e de fato, você não precisa de uma camada de persistência para isso. Mas para sistemas de gente grande, para centenas até milhares de usuário, e com acesso massivo a um recurso concorrido como o banco de dados, você precisa de uma solução mais consistente para gerenciar esses recursos. Veja que nem chegamos a conversar sobre gerência de transações.
Agora, existem casos sim, mesmo para grandes sistema onde usar uma camada de persistência mais atrapalha do que ajuda. Geralmente são aqueles casos em que você tem que manipular transferência de grandes massas de dados de um banco para o outro, ou coisas do tipo. Ou seja, são casos em que você precisa manipular dados brutos ao invés de manipular entidades de domínio. Mas esse é um caso bem específico.