MyBatis

MyBatis
Desarrollador
El equipo MyBatis
http://www.mybatis.org
Información general
Última versión estable 3.0.6
9 de octubre de 2011; hace 20 días (2011-10-09)
Género Persistencia (informática)
Programado en Java y .NET
Sistema operativo Multiplataforma
Licencia Licencia Apache 2.0
Estado actual Con soporte
En español Sí. 

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

Referencias

  1. Cat Fight in a Pet Store: J2EE vs..NET [1]
  2. JPetStore 1.0 [2]
  3. Anuncio de JPetStore 1.0 en TheServerside.com [3]
  4. Anuncio de iBATIS 2.0 [4]
  5. El equipo de iBATIS cambia a Google Code [5]
  6. MyBatis 3.0 announcement [6]

Enlaces externos


Wikimedia foundation. 2010.

Mira otros diccionarios:

  • MyBatis — Developer(s) The MyBatis team Stable release 3.0.6 / October 9, 2011; 18 days ago (2011 10 09) Development status Active Written in …   Wikipedia

  • iBATIS — Desarrollador Apache Software Foundation http://ibatis.apache.org Información general Última versión estable 2.3.4 …   Wikipedia Español

  • iBATIS — Entwickler Apache Software Foundation Aktuelle Version 3.0 (Java), 1.6.2/1.9.2 (.Net) (17. April 2010) Aktuelle Vorabversion mybatis 3.0.1 (19. Mai …   Deutsch Wikipedia

  • OGNL — File:OGNL logo.png Developer(s) OGNL Technology Stable release 2.7.2 / January 31, 2008; 3 years ago (2008 01 31) Written in …   Wikipedia

  • Hibernate — Este artículo o sección sobre informática necesita ser wikificado con un formato acorde a las convenciones de estilo. Por favor, edítalo para que las cumpla. Mientras tanto, no elimines este aviso puesto el 29 de marzo de 2010. También puedes… …   Wikipedia Español

  • OGNL — Archivo:OGNL logo.png Desarrollador OGNL Technology http://www.opensymphony.com/ognl Información general Úl …   Wikipedia Español

  • Spring Framework — У этого термина существуют и другие значения, см. Spring. Spring Framework Тип Application framework Разработчик SpringSource Написана на …   Википедия

  • Hibernate (библиотека) — У этого термина существуют и другие значения, см. Hibernate. Hibernate Тип Object Relational Mapping Разработчик Red Hat Написана на Java …   Википедия

  • iBATIS — est un framework Apache de persistance qui permet de mettre en correspondance des requêtes SQL et des instances d objet. Le 21 mai 2010 l équipe de développement a décidé de se déplacer de l Apache Software Foundation vers Google Code en… …   Wikipédia en Français


Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.