viernes, 8 de mayo de 2009

IBATIS

Es un framework de código abierto basado en capas que se ocupa de la capa de Persistencia.

Puede ser implementado en Java y .NET (también existe un port para Ruby on Rails llamado RBatis).

Asocia objetos de modelo (JavaBeans) con sentencias SQL o procedimientos almacenados mediante ficheros XML, simplificando la utilización de bases de datos.

A diferencia de Hibernate, se necesitan conocimientos de sql, 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.

Se configura mediante un fichero XML de configuración, sql-map-config.xml.
Además cada objeto de modelo, que representa al objeto en la aplicación, se relaciona con un fichero del tipo sqlMap.xml, que contiene sus sentencias SQL. Por ejemplo, un objeto Java Usuario con un objeto XML usuario.xml.

Es posible subdividir la capa de Persistencia en tres subcapas:

  • La capa de Abstracción será el interfaz con la capa de la lógica de negocio, haciendo las veces de “facade” entre la aplicación y la persistencia. Se implementa de forma general mediante el patrón Data Access Object (DAO), y particularmente en iBATIS se implementa utilizando su framework DAO (ibatis-dao.jar).
  • La capa de Framework de Persistencia será el interfaz con el gestor de Base de Datos ocupándose de la gestión de los datos mediante un API. Normalmente en Java se utiliza JDBC; iBATIS utiliza su framework SQL-MAP (ibatis-sqlmap.jar).
  • La capa de Driver se ocupa de la comunicación con la propia Base de Datos utilizando un Driver específico para la misma.

Toda implementación de iBATIS incluye los siguientes componentes:

  • Data Mapper: proporciona una forma sencilla de interacción de datos entre los objetos Java y .NET y bases de datos relacionales.
  • Data Access Object: abstracción que oculta la persistencia de objetos en la aplicación y proporciona un API de acceso a datos al resto de la aplicación