Estructura del archivo de configuración
El archivo central de MyBatis, comúnmente denominado mybatis-config.xml, centraliza los ajustes globales del framework. A continuación, se presenta una estructura base representativa:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- Carga de archivos externos -->
<properties resource="db_config.properties" />
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="desarrollo">
<environment id="desarrollo">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.pass}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/app/storage/ProductMapper.xml"/>
</mappers>
</configuration>
Jerarquía Obligatoria de Etiquetas
MyBatis exige un orden estricto en los elementos dentro de <configuration>. Alterar este orden provocará errores de validación DTD durante el arranque:
propertiessettingstypeAliasestypeHandlersobjectFactoryobjectWrapperFactoryreflectorFactorypluginsenvironmentsdatabaseIdProvidermappers
Desglose de Componentes Principales
Etiqueta properties
Permite externalizar la configuración en archivos .properties tradicionales. Esto facilita el cambio de credenciales sin moidficar el XML principal.
<!-- Referencia a un archivo en el classpath -->
<properties resource="datasource.properties">
<property name="backup.username" value="admin_dev"/>
</properties>
Etiqueta settings
Controla el comportamiento interno del motor de MyBatis. Uno de los ajustes más críticos es mapUnderscoreToCamelCase, que vincula automáticamente columnas de base de datos como user_name con atributos Java como userName.
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
Etiqueta typeAliases
Reduce la verbosidad en los archivos Mapper permitiendo usar nombres cortos en lugar de nombres de clase completamente calificados (FQCN).
- Individual: Define un alias para una clase específica.
- Por paquete: Escanea todas las clases de un paquete y asigna como alias el nombre simple de la clase (no distingue mayúsculas).
<typeAliases>
<!-- Alias individual -->
<typeAlias type="com.app.model.InventoryItem" alias="Item"/>
<!-- Escaneo masivo -->
<package name="com.app.entity"/>
</typeAliases>
Etiqueta environments
MyBatis permite configurar múltiples entornos (producción, prueba, desarrollo), aunque solo se puede activar uno por cada SqlSessionFactory.
- transactionManager:
JDBC: Gestiona transacciones manualmente mediante el objeto Connection.MANAGED: Delega la gestión de transacciones a un contenedor externo (como un servidor de aplicaciones EJB).
- dataSource:
POOLED: Utiliza un pool de conexiones para mejorar el rendimiento.UNPOOLED: Abre y cierra una conexión física en cada solicitud (útil para herramientas sencillas o entornos de baja carga).JNDI: Recupera el DataSource desde un recurso administrado por el servidor.
Etiqueta mappers
Registra las definiciones de las sentencias SQL. Se pueden registrar archivos individuales o paquetes completos que contengan interfaces Mapper.
<mappers>
<!-- Registro vía recurso -->
<mapper resource="mappers/OrderMapper.xml"/>
<!-- Registro vía interfaz -->
<mapper class="com.app.dao.UserDao"/>
<!-- Escaneo de todo el paquete -->
<package name="com.app.repository"/>
</mappers>
Al utilizar el registro por paquete (package), es imperativo que tanto la interfaz Java como el archivo XML de mapeo residan en el mismo directorio dentro de la esturctura de paquetes y tengan el mismo nombre.