Configuración de mybatis-config.xml

El archivo mybatis-config.xml es el núcleo de la configuración de MyBatis. Define cómo se conectará tu aplicación a la base de datos, cómo se manejarán las transacciones y dónde se encuentran los mapeos SQL.

Dependencias

Primero, asegúrate de tener las dependencias necesarias en tu archivo pom.xml:


<dependencies>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.48</version>
   </dependency>
   <!-- MyBatis -->
   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.2</version>
   </dependency>
</dependencies>
   

Estructura del archivo mybatis-config.xml

La estructura del archivo mybatis-config.xml sigue un orden estricto. Cada aplicación MyBatis se centra en una instancia de SqlSessionFactory, que se puede obtener a través de SqlSessionFactoryBuilder. Este constructor puede crear la SqlSessionFactory a partir de un archivo XML de configuración o de una instancia preconfigurada de Configuration.

Sección properties: Carga de recursos externos

Puedes externalizar las propiedades de configuración de la base de datos en un archivo separado, como jdbc.properties.

Archivo jdbc.properties


jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username = root
jdbc.password = root
   

Configuración en mybatis-config.xml

Dentro de mybatis-config.xml, usa la etiqueta <properties> para cargar este archivo. Los valores se accederán usando la sintaxis ${propertyName}.


<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
   <!-- Carga de archivo de propiedades externo -->
   <properties resource="jdbc.properties" />

   <!-- Configuración de entornos: permite múltiples entornos, 'default' especifica el activo -->
   <environments default="development">
       <!-- 'id' es un identificador único para el entorno -->
       <environment id="development">
           <!-- Gestor de transacciones, 'type' especifica el tipo -->
           <transactionManager type="JDBC" />
           <!-- Fuente de datos: 'type' especifica el tipo de pool -->
           <dataSource type="POOLED">
               <property name="driver" value="${jdbc.driverClass}" />
               <property name="url" value="${jdbc.url}" />
               <property name="username" value="${jdbc.username}" />
               <property name="password" value="${jdbc.password}" />
           </dataSource>
       </environment>
   </environments>

   <!-- Mapeadores SQL -->
   <mappers>
       <mapper resource="UserMapper.xml" />
       <mapper resource="UserDaoMapper.xml" />
   </mappers>
</configuration>
   

Sección settings: Ajustes de configuración

La sección <settings> permite configurar varios aspectos del comportamiento de MyBatis. Aquí se destacan algunos:

  • lazyLoadingEnabled: Habilita o deshabilita la carga perezosa de asociaciones y colecicones.
  • aggressiveLazyLoading: Controla si se cargan todas las propiedades perezosas o solo las accedidas.
  • mapUnderscoreToCamelCase: Habilita el mapeo automático de nombres de columna de base de datos con guiones bajos (ej. user_name) a nombres de propiedades Java en formato camelCase (ej. userName).

Mapeo Camel Case

Para que MyBatis mapee automáticamente nombres de columnas como user_name a propiedades POJO como userName, configura lo siguiente:


<settings>
   <!-- Habilita el mapeo automático de columnas con guiones bajos a propiedades camelCase -->
   <setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
   

Con esta configuración, no necesitarás usar alias en tus sentencias SQL para hacer coincidir nombres de columnas y propiedades.

Configuración de Logs (Ejemplo con Log4j)

MyBatis puede integrarse con varios frameworks de logging. Para usar Log4j, necesitas añadir la dependencia y configurar mybatis-config.xml y un archivo log4j.properties.

Dependencia de Log4j


<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>
   

Archivo log4j.properties


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=DEBUG, stdout
   

Configuración del Log en mybatis-config.xml

Especifica la implementación de logging deseada en la sección <settings>.


<settings>
   <setting name="logImpl" value="LOG4J" />
</settings>
   

Otras implementaciones de logging disponibles incluyen STDOUT_LOGGING (para salida estándar), SLF4J, LOG4J2, etc.

Sección typeAliases: Alias de tipos

Los alias de tipos permiten usar nombres cortos para tus clases POJO en lugar de sus nombres completos. Esto reduce la verbosidad en los archivos de mapeo XML.

Método 1: typeAlias individual

Define un alias para cada clase POJO:


<typeAliases>
   <typeAlias alias="Usuario" type="com.ejemplo.modelo.Usuario" />
   <typeAlias alias="Perfil" type="com.ejemplo.modelo.Perfil" />
</typeAliases>
   

Método 2: Escaneo de paquetes

MyBatis puede escanear un paquete completo y crear alias automáticamente para las clases encontradas. Por defecto, el alias será el nombre de la clase en minúsculas (no sensible a mayúsculas/minúsculas). Puedes usar la anotación @Alias en tus POJOs para especificar un alias personalizado.


<typeAliases>
   <!-- Escanea el paquete y crea alias basados en el nombre de la clase -->
   <package name="com.ejemplo.modelo"/>
</typeAliases>
   

Si una clase tiene la anotación @Alias("aliasPersonalizado"), se usará ese alias.

Sección environments: Configuración de entornos

MyBatis permite configurar múltiples entornos (ej. desarrollo, pruebas, producción). Puedes especificar cuál entorno está activo por defecto, o pasarlo como parámetro al construir la SqlSessionFactory.


// Especificando el entorno 'test' al construir la SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "test");
   

Los tipos de gestor de transacciones y fuente de datos más comunes son JDBC y POOLED respectivamente.

Sección mappers: Mapeo de sentencias SQL

Aquí le indicas a MyBatis dónde encontrar los archivos de mapeo SQL (archivos XML que contienen las sentencias SQL y su mapeo a interfaces Java).

Referencia de recursos (relativo a la ruta de clases)


<mappers>
 <mapper resource="mappers/UsuarioMapper.xml"/>
 <mapper resource="mappers/ProductoMapper.xml"/>
</mappers>
   

URL (localizador de recursos absoluto)


<mappers>
 <mapper url="file:///ruta/completa/mappers/UsuarioMapper.xml"/>
</mappers>
   

Clase mapeadora (interfaz Java)

Si usas interfaces de mapeo, puedes registrarlas directamente. En este caso, el archivo XML de mapeo debe tener el mismo nombre que la interfaz y estar en el mismo paquete.


<mappers>
 <mapper class="com.ejemplo.mapper.UsuarioMapper"/>
 <mapper class="com.ejemplo.mapper.ProductoMapper"/>
</mappers>
   

Escaneo de paquetes de mapeo

Para registrar todas las interfaces de mapeo dentro de un paquete:


<mappers>
 <package name="com.ejemplo.mapper"/>
</mappers>
   

Etiquetas: MyBatis configuracion XML JDBC settings

Publicado el 7-23 02:23