# IBATIS

iBATIS es un framework (marco de trabajo) de código abierto basado en capas desarrollado por Apache Software Foundation, que se ocupa de la capa de Persistencia (se sitúa entre la lógica de Negocio y la capa de la Base de Datos). Puede ser implementado en Java y .NET (también existe un port para Ruby on Rails llamado RBatis).
iBATIS asocia objetos de modelo (JavaBeans) con sentencias SQL o procedimientos almacenados mediante ficheros descriptores XML, simplificando la utilización de bases de datos.
El 21 de mayo de 2010 el equipo de desarrollo decidió continuar el proyecto en Google Code bajo la nueva denominación MyBatis.

## Características

Es posible subdividir la capa de Persistencia en tres subcapas:
* La capa de Abstracción será la 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á la 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

## La capa de Abstracción

Se configura mediante el fichero dao.xml.

## La capa de Persistencia

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.

## Historia

En el año 2001 Clinton Begin comenzó el proyecto iBATIS. Originalmente iba a tratarse de un proyecto criptográfico. El primer producto de iBATIS fue Secrets, un sistema de criptografía personal similar a PGP.
En ese mismo año Microsoft publicó un controvertido artículo para demostrar que su, entonces novedoso framework, .NET 1.0 era 10 veces más rápido y 4 veces más productivo que Java. Para ello tomó la aplicación Web "Pet Store" que Sun Microsystems había utilizado como demostración de uso de diversos patrones de diseño en Java (Java BluePrints) y construyó su propia versión en .NET.
En 2002 Clinton desarrolló una versión de la aplicación denominada JPetStore que demostraba que Java podía ser más productivo que .NET incluso utilizando mejores prácticas de diseño que las usadas por Microsoft en su versión.
El trabajo tuvo gran repercusión en foros informáticos y suscitó un gran interés por la capa de persistencia de Clinton había usado. Pronto se crearía el proyecto iBATIS Database Layer 1.0 que constaba de dos componentes: iBATIS DAO e iBATIS SQL Maps.
La segunda versión de iBATIS se publicó en junio de 2004. Se desarrolló dentro de la comunidad de la ASF (Apache Software Foundation). Era funcionalmente similar a la primera versión pero se hizo un importante rediseño interno. Clinton cedió el código y el nombre de iBATIS a la ASF y el proyecto estuvo alojado 6 años en ASF aunque el equipo que mantenía el código original apenas cambió.
iBATIS dejó fuera de soporte el componente de iBATIS DAO por considerar que había factorías de terceros mucho más potentes como Spring Framework.
El 19 de mayo de 2010 se publica la versión 3.0 de iBATIS y simultáneamente mueven el desarrollo de ASF a Google Code bajo el nuevo nombre MyBatis

## Estado del proyecto

El desarrollo de iBATIS es retirado el 16 de junio de 2010 cambiando su nombre a MyBatis y alojada en Google Code.
* Web oficial: http://www.mybatis.org/
* Web Google Code: http://code.google.com/p/mybatis/