- MyBatis
-
MyBatis Desarrollador El equipo MyBatis
http://www.mybatis.orgInformación general Última versión estable 3.0.6
9 de octubre de 2011Género Persistencia (informática) Programado en Java y .NET Sistema operativo Multiplataforma Licencia Licencia Apache 2.0 Estado actual Con soporte En español MyBatis es una herramienta de persistencia disponible para Java y .NET 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 era anteriormente conocido como iBATIS.
Contenido
Características
A diferencia de las herramientas ORM, MyBatis no pretende realizar un mapeo entre un modelo de objetos y el modelo relacional de la base de datos sino que mapea sentencias específicas a objetos específicos. Esto hace de MyBatis una herramienta tremendamente sencilla y especialmente indicada para bases de datos legadas, desnormalizadas o para tener un control total de lo que se ejecuta en la base de datos.
MyBatis 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 sólo uno.
La característica más importante de MyBatis es su simplicidad. Sólo debes usar tus propios objetos, sentencias SQL y una notación sencilla en XML o anotaciones.
MyBatis no sólo permite mapear objetos a datos obtenidos de la base de datos sino que permite asignar sentencias SQL a métodos de interfaces (denominados mappers). Esto, combinado con un framework de inyección de dependencias, permite construir código de negocio libre de dependencias, incluso sin llamadas al API de MyBatis. Para ello, MyBatis dispone de integración con Spring Framework y Google Guice.
MyBatis soporta el uso de caché declarativa. Es decir, es posible indicar en el fichero XML que una sentencia debe ser cacheada. En este caso MyBatis buscará los datos en una caché antes de solicitarlos a la base de datos. Se soportan varias cachés: OSCache, EHCache y Hazelcast y soporta la adición de código propio de integración con otras cachés.
Guía rápida de uso
En el siguiente ejemplo se define el uso de una select y el objeto asociado con ella "Blog" utilizando un fichero de configuración XML.
<?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>
Para ejecutar la sentencia simplemente debe escribirse.
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
MyBatis incorpora como novedad el uso de mappers. Los mappers permiten evitar el uso de literales en el código, que no son verificados por el compilador y permiten usar el autocompletado de las herramientas de desarrollo.
Los mappers son DAOs (objetos de acceso a datos). Pero a diferencia de la implementación clásica de un DAO que consiste en una interfaz y al menos una implementación, los mappers son simplemente interfaces que declaran un método por cada sentencia ejecutable. No requieren implementación dado que MyBatis la genera dinámicamente mediante proxys dinámicos.
BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);
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" (alta, baja, modificación, borrado) 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 modulo 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); ... } }
Integración con Google Guice
MyBatis dispone también de un módulo de integración con Google Guice. Este módulo contiene un conjunto de Modules y Providers que construyen los objetos de MyBatis y los inyectan en los objetos de negocio. Añade también soporte transaccional declarativo mediante la anotación @Transactional.
Construcción del módulo MyBatis:
Injector injector = Guice.createInjector( new MyBatisModule.Builder() .addMapperClasses(org.mybatis.example.BlogMapper.class) .create();
Inyección de mappers:
@Singleton public class BlogServiceImpl implements BlogService { @Inject private BlogMapper blogMapper; @Transactional 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
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[1] 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[2] 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[3] 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.[4] 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.[5] Además, dado que el nombre de iBATIS había sido cedido a la ASF renombran el proyecto a MyBatis. Hasta el momento era la primera vez que un "top level project" abandonaba la ASF. Como curiosidad, el nombre de paquete de MyBatis aun es org.apache.ibatis.
MyBatis 3.0[6] consiste en un completo rediseño del producto buscando sencillez de diseño y una alta cobertura de pruebas. La versión 3.0 incluye como novedad la creación dinámica en tiempo de ejecución de DAOs (denominados mappers).
Véase también
- Hibernate
- JDBC
- JPA
- Spring Framework
- Google Guice
Referencias
Enlaces externos
Categorías:- Frameworks de Java
- Software libre
Wikimedia foundation. 2010.