Alternativas ao JPA Hibernate. O que usar quando o JPA não atende meu projeto?

Spring JDBC Template

Esse é um dos frameworks (se não o mais) mais famosos no mercado como solução para consulta ao banco de dados.

O código do projeto que veremos nessa página pode ser encontrado aqui: https://github.com/uaihebert/SpringJdbcTemplateCrud

O Spring JDBC Template utiliza de consultas nativas do banco como visto abaixo:

Spring01

Como é possível ver no exemplo acima as consultas estão utilizando a sintaxe nativa do banco (MySQL). Ao utilizar consultas nativas é possível usar as funções nativas do banco de dados de modo simples.

Precisamos instanciar um objeto do tipo JDBC Template , e para isso precisamos que um datasource seja inicializado:

Spring03

Com o datasource em mãos (graças a injeção do spring) basta criar a instância do JDBCTemplate:

Spring04

Lembrando que todo esse código do XML e onde manualmente criamos o JDBCTemplate pode ser trocado por uma injeção automática de dependências, basta pesquisar sobre o Spring.

Uma coisa que achei ruim foi a quantidade de código necessária para recuperar o ID após um INSERT:

Spring05

Através da classe KeyHolder é possível obtermos o ID que foi gerado para determinado objeto, mas infelizmente é necessário um código enorme para isso.

As demais funções do JDBC Template são bem simples e práticas de utilizar. Veja por exemplo no código abaixo:

Spring06

Note que para realizar uma consulta é bem simples e o objeto já vem pronto, graças ao RowMapper. O RowMapper é o conceito do JDBC Template de facilitar a criação de um objeto utilizando as informações encontradas no banco. Veja abaixo o código do RowMapper:

Spring07

E a melhor parte é que o RowMapper pode ser reutilizado em todo o projeto nas mais variadas consultas, sem problema algum. A lógica de recuperar o objeto fica por conta do desenvolvedor, mas será escrita apenas uma vez.

E para finalizar, veja abaixo como ficam os métodos para atualizar e remover do banco de dados:

Spring08

Spring09

Sobre o Spring JDBC Template é possível dizer que:

  • Tem um suporte muito bom: Qualquer pesquisa na internet retornará diversos resultados e é fácil de encontrar material de estudo.
  • Amplamente utilizado: Diversos projetos utilizam o JDBC Template assim como suas outras funcionalidades.
  • Cuidado caso seu projeto rode em bancos diferentes: O SQL nativo pode virar um problema caso mais de um banco de dados seja suportado. Diversa queries deverão ser rescritas conforme a sintaxe mudar entre os bancos.
  • Estudo: É bom ter um conhecimento básico do Spring para poder configurar e utilizar essa ferramenta de modo correto.

Para aqueles que não sabem o Spring é dividido em módulos, com isso é possível utilizar apenas a parte do JDBC Template em seu projeto mantendo os outros frameworks intactos.

20 thoughts on “Alternativas ao JPA Hibernate. O que usar quando o JPA não atende meu projeto?

  1. Excelente artigo, Hebert!

    Passei a usar primordialmente Spring JDBC Template depois de algumas experiências amargas com JPA. Encontrei também muitos desenvolvedores em caminhos parecidos.

    Ao mesmo tempo que o JPA diminui um pouco a quantidade de código e abstrai o SQL, o desenvolvedor sente-se mais “amarrado”. Ao voltar para o “JDBC”, vem uma sensação de liberdade que vários colegas já descreveram.

    Talvez possa usar uma analogia: o JPA é como um caminhão grande que tem uma grande carga e capacidade, e o JDBC seja como um carrinho pequeno, que é que mais ágil de manobrar, porém com menos funcionalidades.

    Abraço e sucesso!

  2. Olá Hebert, tudo bem?
    Antes de comentar preciso lhe agradecer e parabenizar pelo trabalho cuidadoso e profissional que vc dispensa nesse canal de informação muito importante para nós brasileiros. Obrigado mesmo!
    Na sua lista, se possível, acrescentaria o Apache Cayenne[1] e o
    DataNucleus-JDO[2]. Do Cayenne posso falar um pouco(o conheci ao
    estudar e trabalhar com o Apache Click[3] ou framework fantástico), ferramente esplêndida e produtiva. Já o JDO é o vovô das especificações por isso merece todo respeito.
    [1] http://cayenne.apache.org/
    [2] http://www.datanucleus.org/products/accessplatform_4_0/jdo/api.html
    [2] http://click.apache.org/ | http://click.avoka.com/click-examples/cayenne/tabbed-cayenne-form-page.htm#

    • Gilberto, boa tarde.

      Fico honrado pelas palavras de apoio, muito obrigado.

      Valeu pelas contribuições, assim que possível, vou adicioná-las ao post.

  3. Herbert
    Vi sua apresentacao no infoQ (http://www.infoq.com/br/presentations/quando-jpa-nao-atende), foi bem legal! Parabéns!
    O Hibernate já me tirou muitas noites de sono depois de ter que fazer “ALTER TABLE” na manutenção do banco. Além de ter descartado JPA em projetos com banco legado com muitas procedures, queries complexas e tabelas sem integridade referencial.
    Como mencionado pelos colegas, corri para o bom e velho “JDBCzão”.

  4. como de costume ótimo post. Hebert só uma sugestão, esse menu flutuante das redes sociais no lado direito do site atrapalha bastante a leitura, tirando isso parabéns pelo blog!!

  5. Olá amigo, parabéns pelo post.

    Sugiro que crie no final uma matriz relacionando as bibliotecas com o que foi avaliado:
    documentação, facilidade de uso inicial etc…

    Vai da uma incrementada legal a ele.

    • Onezino, boa noite.

      Primeiro, me perde a demora em responder. Estou muito pegado no trabalho, para você ter idéia, estou te respondendo dele enquanto um deploy não termina.

      Obrigado pela idéia, caso um dia eu venha a editar esse post com certeza colocarei a matriz.

      E, quando eu criar outros posts desse tipo, colocarei a matriz ao final.

      Obrigado por tudo.

  6. Ótimo review das ferramentas de integração cmo SGBD. Só fiquei meio frustrado por você não ter conseguido executar um projeto com jOOQ. Vim seco para ler este post querendo saber sua opinião sobre ele. Acho que merece um post a parte ou uma atualização aqui… =)

  7. Ótimo Post. Mas tipo, eu estou começando uma aplicação agora e irei fazer o teste da troca pois irei trabalhar com um site que será melhor tratado se não tiver os enormes processos do JPA/Hibernate. Mas estou enfrentando o cenario de Versionamento/Concorrencia dos dados utilizando o Spring JDBCTemplate. Hebert você conhece algum framework que trate isso, ou irei ter de implementar na mão? Abraços !

    • José, boa tarde.

      Honestamente o primeiro framework que veio em minha mentem foi o JPA. (:

      Eu só não entendi o que seria “enormes processos” do JPA. Eu honestamente só vi problema quando o JPA foi mau utilizado ou então quando existia milhares de requisições por segundo.

      Como você está usando o JDBCTemplate eu te aconselho a procurar por “spring jdbctemplate concurrency” no google e ver o que o pessoal fala.

      De cabeça não me lembro de nada que se “acople” ao Spring para fazer esse tratamento.

Leave a Comment