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 | ||
---|---|---|
Información general | ||
Tipo de programa | Persistencia (informática) | |
Desarrollador | El equipo MyBatis | |
Licencia | Licencia Apache 2.0 | |
Estado actual | Con soporte | |
Información técnica | ||
Programado en | Java | |
Versiones | ||
Última versión estable | 3.4.2 (info) ( 04 de enero de 2017 (6 años, 7 meses y 23 días)) | |
Enlaces | ||
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.
package org.mybatis.example;
public interface BlogMapper {
@Select("select * from Blog where id = #{id}")
Blog selectBlog(int id);
}
Para ejecutar la sentencia simplemente debe escribirse.
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
O bien usando el API de MyBatis.
Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
Las sentencias SQL y los mapeos pueden externalizarse a ficheros XML como el siguiente.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
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.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="org.mybatis.example.BlogMapper" />
</bean>
<bean id="blogService" class="org.mybatis.example.BlogServiceImpl">
<property name="blogMapper" ref="blogMapper" />
</bean>
De esta forma, para usar MyBatis simplemente hay que invocar al mapper inyectado.
public class BlogServiceImpl implements BlogService {
private BlogMapper blogMapper;
public void setBlogMapper(BlogMapper blogMapper) {
this.blogMapper = blogMapper;
}
public void doSomethingWithABlog(int blogId) {
Blog blog = mapper.selectBlog(blogId);
...
}
}
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.[1]
El 10 de noviembre de 2013 el proyecto anunció el movimiento a Github.[2]