b'\n_START_ARTICLE_\nMyBatis\n_START_SECTION_\nCaracter\xc3\xadsticas\n_START_PARAGRAPH_\nA diferencia de las herramientas ORM MyBatis no mapea objetos Java a tablas de base de datos sino m\xc3\xa9todos a sentencias SQL._NEWLINE_Permite utilizar todas las funcionalidades de la base de datos como procedimientos almacenados, vistas, consultas de cualquier complejidad o funcionalidades espec\xc3\xadficas del proveedor. Es una herramienta indicada para bases de datos legadas, desnormalizadas o cuando es preciso tener el control total del SQL ejecutado._NEWLINE_Simplifica la programaci\xc3\xb3n frente al uso directo de JDBC. Las l\xc3\xadneas de c\xc3\xb3digo necesarias para ejecutar una sentencia se reducen casi siempre a una. Esta simplificaci\xc3\xb3n ahorra tiempo y evita errores habituales como olvidar cerrar una conexi\xc3\xb3n a base de datos, realizar incorrectamente un mapeo de datos, exceder el tama\xc3\xb1o de un result set u obtener varios resultados cuando se esperaba solo uno._NEWLINE_Proporciona un motor de mapeo de resultados SQL a \xc3\xa1rboles de objetos basado en informaci\xc3\xb3n declarativa._NEWLINE_Soporta la composici\xc3\xb3n de sentencias SQL din\xc3\xa1micas mediante un lenguaje con sintaxis tipo XML._NEWLINE_Soporta integraci\xc3\xb3n con Spring Framework y Google Guice. Esta caracter\xc3\xadstica, permite construir c\xc3\xb3digo de negocio libre de dependencias, incluso sin llamadas al API de MyBatis._NEWLINE_Soporta el uso de cach\xc3\xa9 declarativa. Soporta varias cach\xc3\xa9s: OSCache, EHCache, Hazelcast y Memcached y soporta la adici\xc3\xb3n de c\xc3\xb3digo propio de integraci\xc3\xb3n con otras cach\xc3\xa9s.\n_START_SECTION_\nGu\xc3\xada r\xc3\xa1pida de uso\n_START_PARAGRAPH_\nLas sentencias SQL pueden almacenarse en ficheros XML o en anotaciones. A continuaci\xc3\xb3n se muestra un mapper, que es una interfaz Java con anotaciones de MyBatis._NEWLINE_package org.mybatis.example;public interface BlogMapper {_NEWLINE_    @Select("select * from Blog where id = #{id}")_NEWLINE_    Blog selectBlog(int id);}_NEWLINE_Para ejecutar la sentencia simplemente debe escribirse._NEWLINE_BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);_NEWLINE_O bien usando el API de MyBatis._NEWLINE_Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);_NEWLINE_Las sentencias SQL y los mapeos pueden externalizarse a ficheros XML como el siguiente._NEWLINE_<?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">_NEWLINE_    <select id="selectBlog" parameterType="int" resultType="Blog">_NEWLINE_        select * from Blog where id = #{id}_NEWLINE_    </select></mapper>_NEWLINE_Toda la documentaci\xc3\xb3n detallada se encuentra en la Gu\xc3\xada de Usuario disponible en la p\xc3\xa1gina del proyecto. Ver enlaces externos.\n_START_SECTION_\nGenerador de c\xc3\xb3digo\n_START_PARAGRAPH_\nMyBatis dispone de un generador de c\xc3\xb3digo. 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._NEWLINE_El generador permite realizar modificaciones en el c\xc3\xb3digo generado que ser\xc3\xa1n preservadas en caso de regeneraci\xc3\xb3n._NEWLINE_Disponible tambi\xc3\xa9n formato plugin de Eclipse.\n_START_SECTION_\nIntegraci\xc3\xb3n con Spring\n_START_PARAGRAPH_\nMyBatis dispone de un m\xc3\xb3dulo de integraci\xc3\xb3n con Spring Framework. El m\xc3\xb3dulo permite que MyBatis participe en transacciones Spring. Permite tambi\xc3\xa9n crear mappers y sesiones e inyectarlos en beans de servicio._NEWLINE_A continuaci\xc3\xb3n se muestra la definici\xc3\xb3n del Mapper en Spring y su inyecci\xc3\xb3n en un bean de servicio denominado BlogService._NEWLINE_<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">_NEWLINE_    <property name="dataSource" ref="dataSource" /></bean><bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">_NEWLINE_    <property name="sqlSessionFactory" ref="sqlSessionFactory" />_NEWLINE_    <property name="mapperInterface" value="org.mybatis.example.BlogMapper" /></bean><bean id="blogService" class="org.mybatis.example.BlogServiceImpl">_NEWLINE_    <property name="blogMapper" ref="blogMapper" /></bean>_NEWLINE_De esta forma, para usar MyBatis simplemente hay que invocar al mapper inyectado._NEWLINE_public class BlogServiceImpl implements BlogService {_NEWLINE__NEWLINE_    private BlogMapper blogMapper;_NEWLINE__NEWLINE_    public void setBlogMapper(BlogMapper blogMapper) {_NEWLINE_        this.blogMapper = blogMapper;_NEWLINE_    }_NEWLINE__NEWLINE_    public void doSomethingWithABlog(int blogId) {_NEWLINE_        Blog blog = mapper.selectBlog(blogId);_NEWLINE_        ..._NEWLINE_    }}\n_START_SECTION_\nMyBatis Migrations\n_START_PARAGRAPH_\nMyBatis Migrations es una herramienta Java de l\xc3\xadnea 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)._NEWLINE_Con esta herramienta es posible consultar el estado de la base de datos, aplicar cambios al esquema e incluso deshacerlos. Permite tambi\xc3\xa9n detectar y soluciona cambios concurrentes del esquema de base de datos por distintos desarrolladores.\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nMyBatis es una evoluci\xc3\xb3n del proyecto iBATIS y lo mantiene un equipo de desarrolladores entre los que se encuentran los que desarrollaron iBATIS originalmente._NEWLINE_El proyecto se cre\xc3\xb3 el 19 de mayo de 2010, cuando justo tras el anuncio de la publicaci\xc3\xb3n de iBATIS 3.0 el equipo de desarrollo de iBATIS anunci\xc3\xb3 que continuar\xc3\xadan el proyecto bajo un nuevo nombre y un nuevo hogar.\xe2\x80\x8b_NEWLINE_El 10 de noviembre de 2013 el proyecto anunci\xc3\xb3 el movimiento a Github.\xe2\x80\x8b'