Métodos de acesso ao banco de dados - qual o melhor?

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.

na minha opnião, a melhor opção ultimamente é utilizando JPA com alguma implementação, como Hibernate. Mas se vc nao souber utilizar ele, vai ficar lento msm.

t+

Como o amigo ai de cima disse,precisa saber usar,do contrário pode ser um tiro no pé.
Dá uma olhada nesse link:http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/

Em primeiro lugar, você precisa estar ambientado com aquilo que utiliza.
Se você sempre programou web, vai achar que desktop é um castigo. E vice-versa.
A questão é que existem projetos de vários tamanhos. Se for para fazer uma agenda, com poucas classes e complexidade baixa, sugiro o bom e velho jdbc.
Se for para algo mais complexo, com várias classes e acessos concorrentes ao banco, é preciso utilizar algo mais sofisticado.
Hibernate não é o único framework que implementa as especificações de JPA, talvez, nem seja o melhor. Mas a maioria das faculdades introduz JPA com ele.

Mas e fazer direto o sql dentro do java, não fica mais rápido do que usando hibernate, mesmo se o cara souber configurá-lo?

Vou chutar um número, em 99,99% dos casos a velocidade não é importante.

Se demorar 0,003 segundos para inserir um dado no banco ou se levar 0,006 (o dobro) é indiferente para o usuário.

Existe aplicações, que este tempo é significativo, pois faz minhões de operações. então 0,003 * milhões, acaba sendo importante, mas de maneira geral, se vc estiver achando o JPA lento deve ser algo que você esta fazendo errado.

[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.

Complementando…

Nestes casos sua aplicação pode sim usar o JPA e apenas nestas operações você não usa.

[quote=marcelogomesrp]Complementando…

Nestes casos sua aplicação pode sim usar o JPA e apenas nestas operações você não usa. [/quote]

Sim. Nada impede que as duas abordagens coexistam.