Qual a diferença entre JDBC e JDBI?

Recentemente um colega meu me indicou o usou de JDBI para substituir um ORM. ORM é bom para quem trabalha com múltiplos banco de dados e necessita colocar a mesma aplicação para consumir diferentes bancos de dados. Essa facilidade tem um custo, o custo de performance, pois as ferramentas de ORM precisam converter as chamadas SQL do framework para chamadas que o banco compreende, ou semelhante a nativa.

Então, porque ao invés de não se realizar direto a chamada de JDBC e não tivesse um framework que agilize meu desenvolvimento, mas não comprometa a performance?

Pensando nisso, a galera criou o JDBI, não é nova, tem desde 2004, mas eu só vim descobrir recentemente.

jDBI é uma biblioteca construída em cima de JDBC. JDBC funciona muito bem, mas geralmente parece otimizar para os fornecedores de banco de dados (escritores drivers). jDBI tenta expor a mesma funcionalidade, mas em uma API otimizada para os desenvolvedores.

É nível muito mais baixo do que um ORM como Hibernate ou JPA. A biblioteca é semelhante ao MyBatis (sucessora bifurcada para iBATIS).

jDBI suporta duas APIs estilo, um estilo velho, que se parece com:

List<AlgumaClasse> r = h.createQuery("select * from algo where id = :id and nome = :nome")
.bind("nome", "andre")
.bind("id", 1)
.map(AlgumaClasse.class)
.list();

E o estilo novo da API SQL objeto, que trabalha de uma forma reflexiva  e realmente abstraindo o JDBC:

interface NovoAPISQL
{
@SqlUpdate("insert into algo (id, nome) values (:id, :nome)")
int insert(@Bind("id") int id, @Bind("nome") String nome);

@SqlQuery("select id, nome from algo where id = :id")
AlgumaClasse findById(@Bind("id") long id);
}

A biblioteca tem uma boa referência (javadoc) e documentação estilo tutorial em http://jdbi.org/.

Concluindo

Outro lado interessante é que a comunidade trabalha bastante em melhorias e correções nela, por ser open source.
Vale a pena pensar se seu time ou seu projeto não merece ganhar uma produtividade no trabalho com tarefas de DAO.

Meu github: https://github.com/andremrezende

Anúncios