La mayor parte las diferencias entre Hibernate e iBATIS provienen del hecho de que el último basa su funcionamiento en el mapeo de sentencias SQL que se incluyen en ficheros XML. Eso significa que, al contrario que Hibernate, requiere conocimiento de SQL por parte del programador. Por otra parte, permite la optimización de las consultas, ya sea con lenguaje estándar o con SQL propietario del motor de base de datos utilizado. Con iBATIS, siempre se sabe lo que se está ejecutando en la base de datos, y tiene herramientas para evitar el problema de las “N + 1 consultas” y para generar consultas dinámicas muy potentes.
Cuando el modelo de datos es muy cambiante o es preexistente al desarrollo de la aplicación (y compartido con otras), iBATIS es un claro caso de uso. También lo es cuando las relaciones entre las entidades del modelo son muy complicadas, porque con algo de trabajo se puede conseguir que el número de consultas que se pasan a la base de datos no sea excesivo, sobre todo en los listados descriptivos.
iBATIS ha ganado peso en la comunidad, hasta llegar a incorporarse al proyecto Apache, y su autor ha publicado un libro monográfico del producto en la serie “in action” de Manning.
Uno de los puntos fuertes de iBATIS es la estabilidad y la facilidad para encontrar dónde está el problema. Las transacciones y las cachés funcionan sin dar dolores de cabeza.
Un colega que trabajaba con Hibernate vino a hacer un proyecto con nosotros. No conocía iBATIS, y al principio estaba receloso, porque veía que tenía que bajar siempre hasta la SQL. Ahora lo usan en su empresa y cuando le pregunté por ello me dijo:
Tronco… he sufrido mucho con Hibernate desde que nos conocimos… demasiado poltergeist, demasiado problema con las transacciones y con las sesiones muertas… demasiado trabajo para optimizar.
Como dijo aquel: ¡que razón tenías¡
![]()
Soy más feliz ahora… aunque se curre más… por lo menos cuando hay un problema se ve claro donde está.
Hola ke tal a todos bueno cai por casualidad a este blog y pues kisiera pedirles su ayuda he trabajado con hibernate por los ultimos 2 años pero ahora en el area donde ingreses han trabajkado con ibatio y se me rekirio ke yo lo haga tambien es por ello ke me gustaria saber si me pudieran orientar con bibliografia en la web para entender un pococ mas como funciona ibatis y a su vez ponerlo en practica muchisismas gracias por tratar este tema ke no es muy conocido y la ayuda ke me pudieranm proporcionar se als agardeceria mucho atte nat desde mexico saludos y mil gracias
iBATIS es uno de los proyectos open source mejor documentados. En su página de descargas hay un manual en PDF llamado SQL Maps for Java en varios idiomas, incluido el castellano (aunque yo siempre recomiendo el original en inglés). Deberías empezar por él. También hay una aplicación de ejemplo (JPetStore), que usa una capa DAO propia del framework, pero cuyo uso han desaconsejado en favor de los DAO de Spring.
Para temas más avanzados, mira la Wiki del proyecto, y finalmente el libro iBATIS in Action, de la editorial Manning.
La verdad no me quedan claras algunas cosas:
Si ibatis usa SQL, xq no mejor lo hacemos de frente con jdbc.
Se pueden usar stored procedures en hibernate?
Alguien puede orientarme?
Con JDBC te tienes que ocupar tú de gestionar:
-el pool de conexiones
-la gestión de conexiones (obtención y liberación)
-la gestión de las transacciones
-la transformación de resultados a JavaBeans o listas de ellos
Además las consultas van en el código Java, si las quieres sacar tienes que montarte algo, y para eso mejor lo que ya está hecho, y bien hecho.
iBATIS soporta cacheado de consultas, incluso distribuido para entornos con contenedores en cluster
Y podría seguir. Vamos, es la filosofía de los frameworks, que te abstraen de detalles de la programación y te dan servicios accesibles con poco esfuerzo. Y en esto da igual que sea iBATIS o Hibernate, o que hablemos de frameworks MVC frente a Servlets o JSPs a pelo.
Si no ves las aportaciones, y lo prefieres hacer todo a bajo nivel, entonces yo no puedo aconsejarte, porque no es mi forma de desarrollar con Java (aunque en su día haya picado decenas de aplicaciones con JDBC).
iBATIS tiene soporte para procedimientos almacenados casi desde el principio.
Hibernate 3 lo añadió, aunque había mucha gente dentro del propio proyecto muy en contra de incorporarlo, porque los procedimientos almacenados propugnan la introducción de reglas de negocio en la base de datos.
La verdad es que, en cuatro líneas que has escrito, me da la impresión que tú y yo no íbamos a estar muy de acuerdo en temas de programación.
Gracias, lo tengo mas claro.
En realidad no es que piense diferente estimado amigo, sino que pedia orientación.
Recien tengo el nivel prog junior, y estoy invirtiendo tiempo en un proyecto en Struts2(ya que el Struts ya esta obsoleto) y x eso es q estoy viendo como gestionar las consultas en la bd.He leido, que ibatis es mas facil de aprender y creo que eso emplearé, actualmente solo empleo el patron DAO.
Se q hay dos tipo de Ibatis, ibatis dao e ibatis SQL. En base a tu experiencia, cual es mejor? o se deben emplear juntos?
iBATIS DAO no es un tipo distinto, sino una capa DAO que se puede usar con iBATIS. Actualmente está desaconsejada (deprecated). Si quieres usar DAOs, usa los DAOs de Spring para iBATIS. De hecho, ya que quieres usar Struts 2, te recomiendo Appfuse Light, una aplicación base que junta los tres frameworks en un esqueleto listo para empezar a trabajar.
No encontre lo que me recomendaste.
Lo que quiero es integrar strust2-ibatis-spring para trabajar con elipse, pero menudo lio es esto!!!
Los ficheros .xml me tienen mal.
Ideas ?? Donde existe info para armar una conf basica?
O derrepente si sabes de algun ejemplo ….
Hola , como se puede hacer queries en ibatis con mas de un parametro?
o no se puede?
select * from user
WHERE nomuser = #nomuser#
and passuser = #passuser#
Esto arroja error…..
Tienes dos opciones. La primera es pasar como parámetro a la ejecución iBATIS de la consulta un objeto (de clase Usuario en tu caso) que contenga como propiedades los parámetros que quieras utilizar en la SQL. Las propiedades de la clase Java Usuario deben tener el nombre que pones entre almohadillas, y métodos de acceso (get y set).
La segunda opción, para casos más complejos, es pasar un HashMap, donde el nombre entre almohadillas deberá coincidir entonces con las claves de los valores que desees pasar como argumentos a la consulta.
En este caso, la opción clara es la primera.
De todas formas, esto lo tienes en el PDF de la documentación de iBATIS bastante bien explicado. El tutorial está incluso traducido al castellano.
Hola…
En mi caso tuve la oportunidad de usar Ibatis primero en un proyecto en C#, me pereció todo normal hasta que me crucé con Hibernate en Java… Lo primero que pregunté fue ¿Y las sentencias SQL? pues ahí casi todo es una caja negra.
Saludos!!!
Hola a todos, bueno vengo trabajando con ambos frameworks hace bastante tiempo, y por mi experiencia, pues les puedo decir que yo llevo la filosofia: “Usar solo lo mejor de cada uno”, asi que dependiendo del caso se adecua el uso que quieras darle, por ejemplo hago convivir ambos, cuando se trata de consultas grandes uso ibatis y en mantenimientos simples hibernate, y asi dependiendo del caso, es mas si usan spring te provee capas para poder cambiar el tipo de acceso a la BD, si te cierras a trabajar con solo un framework te obligas a trabajar con solo uno de ellos y en temas de performance siempre vas a tener algun inconveniente y hacer algo extraño por ahi. Asi que yo voto por la complementacion de ambos, a proposito, creo que vi por ahi, que con hibernate se olvidan de las consultas sql?? no es cierto pq igual te provee una clase para que puedas usar sql nativo, obviamente, tienes que tener en claro el mapeo y como quieres obtener los objetos…… hay mucho por hablar pero creo que no es tema de este hilo.
Decidí comenzar a aprender el framework ibatis antes que hibernate, y creo que fue buena decisión. El libro de ibatis in action es muy bueno. Es bastante simple comenzar, y la flexibilidad al poder optimizar las consultas lo hacen muy potente…, sencillo y potente..
Hola, estoy empezando a trabajar con ibatis, me parece muy fácil de usar y de aprender, pero me he estancado con algo, no se como hacer una consulta dinamica, es decir, si mapeo una consulta y en el where pongo los valores que tengo en el hasmap que le paso como parametro tendria que usarlos todos, pero yo solo quiero usar los que tengan un valor diferente de “” en el caso de los string y >0 en el caso de numeros. Como puedo solucionar esto??
Las consultas dinámicas se explican en un capítulo completo de la documentación de iBATIS (actualmente en la página 49).
Dispones de la etiqueta
<dynamic>, dentro de la cual puedes incluir una serie de etiquetas condicionales, de forma que la SQL final que se construye en cada ejecución dependerá de los valores de los parámetros que se pasan.Pongamos un ejemplo con los datos que das. Imagina que tienes un HashMap en el que, en cierto momento de tu código se pueden introducir o no los siguientes pares clave-valor.
map = new HashMap ();
Map
if (condition) {
map.put("name", "Javier");
map.put("age", new Integer(32));
}
// pasamos el mapa como parámetro a una consulta de iBATIS
Una consulta que haría uso de la información de
nameyagesólo en los supuestos que dices, sería:<select id="dynamicSelectUser" result-class="com.javisjava.model.User">
select * from User
<dynamic prepend="where">
<isEmpty property="name" prepend="and">
name = #name#
</isEmpty>
<isGreaterThan prepend="and" property="age" compareValue="0">
age = #age#
</isGreaterThan>
</dynamic>
</select>
Si
conditionesfalsela SQL será:select * from User
Si es
true:select * from User where name = 'Javier' and age = 32
Mírate bien la documentación, y verás que iBATIS es bastante potente en cuanto a la creación de consultas dinámicas.
Gracias por la ayuda Javier, me sirvio bastante y como dices IBATIS es bastante potente, con esta herramienta se me hace todo facil. Muchas gracias nuevamente.
Hola,
Actualmente estoy usando este framework en un proyecto J2EE muy grande que tiene una parte en Host (Mainframe Z10) y una parte en distribuido, un cluster de servidores. El problema es que la misma aplicación que en el Host responde perfectamente, en el distribuido sólo es capaz de lanzar las queries una vez. Cachea el resultado y sólo responde si los datos de entrada son los mismos que los de la primera petición.
¿Alguien se ha enfrentado alguna vez a un problema similar? ¿Me podéis orientar en este tema?
Cual es la version estable de ibates
Es posible ejecutar transacciones con iBatis?
Alguien me puede responder esta pregunta por favor?
Horacio, por supuesto que es posible. A ningún motor de persistencia le puede faltar esa funcionalidad.
Según cómo uses iBatis, la gestión de las transacciones se realiza de diferente forma. Si utilizas la API de iBatis directamente, tendrás que definir las transacciones programáticamante en el código Java, tal y como se muestra en la documentación de la clase SqlMapClient.
http://ibatis.apache.org/docs/java/dev/com/ibatis/sqlmap/client/SqlMapClient.html
try { sqlMap.startTransaction() Employee emp2 = new Employee(); // ...set emp2 data Integer generatedKey = (Integer) sqlMap.insert ("insertEmployee", emp2); emp2.setFavouriteColour ("green"); sqlMap.update("updateEmployee", emp2); sqlMap.commitTransaction(); } finally { sqlMap.endTransaction(); }Si utilizas la antigua capa DAO de iBatis (que está descontinuada y desaconsejada), también tendrás que marcar desde Java las transacciones.
Pero si usas Spring, entonces puedes declarar en su configuración cuál quieres que sea la transaccionalidad. Lo clásico es que cualquier funcionalidad que haya dentro de un método de una clase de servicio (Manager) sea transaccional.
<aop:config> <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))"/> </aop:config>Aunque también es posible hacerlo de forma más controlada, con la anotación @Transactional sobre el método que contenga las consultas que deseemos que se ejecuten como una transacción.
Hola javier,
Podrias publicar un ejemplo de transacciones con spring e ibatis, sobretodo el uso de anotaciones @Transactional.
Gracias,
Hola Javier , he leido los documentos sobre iBatis y me ha impresionado su potencial,
estoy usando el Netbeans 6.7.1 y postgresql quisiera saber que componentes .jar
debo agregar a mi proyecto para empezar a practicar la teoria.
Gracias.
Muy buena info, felicitaciones!!
Dejo más info en :
http://emanuelpeg.blogspot.com/2010/06/myibatis.html
Saludos.
Javier se nota que entiendes bien el tema.
gran aporte.