Ultimamente venho trabalhando com o iBATIS em algumas aplicações pessoais, e ao longo desse período gostei muito de trabalhar com ele, e gostaria de alguma opinião diferente, pois estou pretendendo utilizar aqui no meu trabalho, em um refactor que vou fazer no sistema(hoje em dia é feito tudo na mão, jdbc puro.).
Vocês já usaram? Qual foi a experiência? Prefere Hibernate? (eu pessoalmente não gosto) Algum comentário?
Com o IBATIS todo mapeamento é feito em cima de querys as quais você cria em um XML. Essa abordagem é boa quando não se tem controle sobre o banco de dados, pois assim pode-se mapear qualquer schema para o seu Bean. O IBATIS não gerencia seus beans, portanto ele não garante que o bean que você está usando realmente é o mais atualizado com o banco de dados.
Ja o hibernate faz o mapeamento das tabelas diretamente nos beans(Entity) e os gerencia em memória, garantindo que voce possui os dados mais atuais no seu bean. Além disso o hibernate possui gerenciamento de cache de dois niveis, diminuindo o overhead de buscas no seu banco de dados. No hibernate tambem é possivel fazer o mapeamento das querys nativas para o seu bean.
As duas ferramentas são muito boas, mas deve-se analisar qual a melhor para o perfil do seu projeto. Caso esteja iniciando um projeto novo aconselho utilizar o hibernate pois a produtividade é mais alta e existe muito mais pessoas no mercado que conhecem hibernate, facilitando e barateando futuras trocas de profissionais no projeto.
Pedrosa
IBATIS também possui cache, creio que o Hibernate seja bem mais poderoso e popular, atualmente trabalho com os 3 Hibernate, IBATIS e JDBC, para quem tem conhecimentos avançados em SQL a tendência e se dar muito bem com o IBATIS, mas se trocar o banco de dados suas querys vão ter que ser refeitas problema igual ao do JDBC, já com Hibernate é outro modelo tudo é baseado em objetos a partir da versão 3 com o uso das anatoções se tornou muito mais produtivo, caso troque de banco de dados basta apenas fazer alguns ajustes, resumindo Hibernate!
guilhermevh
Um case muito poderoso é o MySpace que utiliza o iBATIS, e existe uma quantidade absurda de acessos, gerando alta carga o que já no Hibernate (não tenho certeza) não suporta tanto pelo que andei vendo.
O iBATIS utiliza o mapeamento relacional, então em questão a compatibilidade com outros banco de dados, creio que se utilizar os padrões SQL não haverá problema (eu sei que existe bancos que não seguem todas as regras), mas com o iBATIS não seria tão necessário. Em questão de facilidade o Hibernate não gera um alto custo de trabalho comparado ao iBATIS?
Pedrosa
Cara é relativo se montar um DAO generico onde vamos supor que atenda a 80% do seu sistema o restante será o seu trabalho.