# MyBatis

MyBatis es una herramienta de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacenados con objetos a partir de ficheros XML o anotaciones.
MyBatis es software libre y se ha desarrollado bajo Licencia Apache 2.0
MyBatis es una bifurcación de iBATIS 3.0 y es mantenido por un equipo que incluye a los creadores originales de iBATIS.

## Características

A diferencia de las herramientas ORM MyBatis no mapea objetos Java a tablas de base de datos sino métodos a sentencias SQL.
Permite utilizar todas las funcionalidades de la base de datos como procedimientos almacenados, vistas, consultas de cualquier complejidad o funcionalidades específicas del proveedor. Es una herramienta indicada para bases de datos legadas, desnormalizadas o cuando es preciso tener el control total del SQL ejecutado.
Simplifica la programación frente al uso directo de JDBC. Las líneas de código necesarias para ejecutar una sentencia se reducen casi siempre a una. Esta simplificación ahorra tiempo y evita errores habituales como olvidar cerrar una conexión a base de datos, realizar incorrectamente un mapeo de datos, exceder el tamaño de un result set u obtener varios resultados cuando se esperaba solo uno.
Proporciona un motor de mapeo de resultados SQL a árboles de objetos basado en información declarativa.
Soporta la composición de sentencias SQL dinámicas mediante un lenguaje con sintaxis tipo XML.
Soporta integración con Spring Framework y Google Guice. Esta característica, permite construir código de negocio libre de dependencias, incluso sin llamadas al API de MyBatis.
Soporta el uso de caché declarativa. Soporta varias cachés: OSCache, EHCache, Hazelcast y Memcached y soporta la adición de código propio de integración con otras cachés.

## Guía rápida de uso

Las sentencias SQL pueden almacenarse en ficheros XML o en anotaciones. A continuación se muestra un mapper, que es una interfaz Java con anotaciones de MyBatis.
Para ejecutar la sentencia simplemente debe escribirse.
O bien usando el API de MyBatis.
Las sentencias SQL y los mapeos pueden externalizarse a ficheros XML como el siguiente.
Toda la documentación detallada se encuentra en la Guía de Usuario disponible en la página del proyecto. Ver enlaces externos.

## Generador de código

MyBatis dispone de un generador de código. El generador lee los metadatos de la base de datos para generar los beans, DAOs (simples o de Spring) y ficheros XML que implementan el "CRUD" (crear, obtener, actualizar y borrar) de las tablas indicadas.
El generador permite realizar modificaciones en el código generado que serán preservadas en caso de regeneración.
Disponible también formato plugin de Eclipse.

## Integración con Spring

MyBatis dispone de un módulo de integración con Spring Framework. El módulo permite que MyBatis participe en transacciones Spring. Permite también crear mappers y sesiones e inyectarlos en beans de servicio.
A continuación se muestra la definición del Mapper en Spring y su inyección en un bean de servicio denominado BlogService.
De esta forma, para usar MyBatis simplemente hay que invocar al mapper inyectado.

## MyBatis Migrations

MyBatis Migrations es una herramienta Java de línea de comandos que permite realizar un seguimiento de los cambios de esquema de la base de datos. Para ello almacena ficheros DDL con cambios incrementales (denominados migrations).
Con esta herramienta es posible consultar el estado de la base de datos, aplicar cambios al esquema e incluso deshacerlos. Permite también detectar y soluciona cambios concurrentes del esquema de base de datos por distintos desarrolladores.

## Historia

MyBatis es una evolución del proyecto iBATIS y lo mantiene un equipo de desarrolladores entre los que se encuentran los que desarrollaron iBATIS originalmente.
El proyecto se creó el 19 de mayo de 2010, cuando justo tras el anuncio de la publicación de iBATIS 3.0 el equipo de desarrollo de iBATIS anunció que continuarían el proyecto bajo un nuevo nombre y un nuevo hogar.
El 10 de noviembre de 2013 el proyecto anunció el movimiento a Github.