Funcionalidad del Registro de Alias
TypeAliasRegistry mantiene un mapeo entre nombres de alias y clases Java. Esto permite utilizar nombres cortos en lugar de nombres completos de clases en los archivos XML de configuración.
Alias Predefinidos
MyBatis incluye numerosos alias preconfigurados para tipos comunes:
public TypeAliasRegistry() {
// Tipos básicos
registrarAlias("cadena", String.class);
registrarAlias("entero", Integer.class);
registrarAlias("doble", Double.class);
// Tipos primitivos
registrarAlias("_entero", int.class);
registrarAlias("_doble", double.class);
// Colecciones
registrarAlias("mapa", Map.class);
registrarAlias("lista", List.class);
// Otros tipos comunes
registrarAlias("fecha", Date.class);
registrarAlias("decimal", BigDecimal.class);
}
Métodos de Registro
Registro Individual
Para registrar alias específicos:
public void registrarAlias(String alias, String nombreClase) {
try {
Class> clase = Resources.obtenerClase(nombreClase);
registrarAlias(alias, clase);
} catch (ClassNotFoundException e) {
throw new TypeException("Error registrando alias: " + alias, e);
}
}
Registro por Paquete
Para registrar todas las clases de un paquete:
public void registrarAliasPaquete(String nombrePaquete) {
ResolverUtil<class>> utilidad = new ResolverUtil<>();
utilidad.encontrar(new ResolverUtil.EsA(Object.class), nombrePaquete);
for (Class> clase : utilidad.obtenerClases()) {
if (!clase.isAnonymousClass() && !clase.isInterface()) {
registrarAlias(clase);
}
}
}
</class>
Registro con Anotaciones
Las clases pueden especificar su alias mediante anotaciones:
public void registrarAlias(Class> clase) {
String alias = clase.getSimpleName().toLowerCase();
Alias anotacion = clase.getAnnotation(Alias.class);
if (anotacion != null) {
alias = anotacion.valor();
}
registrarAlias(alias, clase);
}
Resolución de Alias
El método de resolución convierte nombres de alias en clases Java:
public <t> Class<t> resolverAlias(String alias) {
if (alias == null) return null;
String clave = alias.toLowerCase(Locale.ENGLISH);
if (ALIASES_TIPO.containsKey(clave)) {
return (Class<t>) ALIASES_TIPO.get(clave);
}
try {
return (Class<t>) Resources.obtenerClase(alias);
} catch (ClassNotFoundException e) {
throw new TypeException("No se pudo resolver el alias: " + alias, e);
}
}
</t></t></t></t>
Uso en Configuración
Los alias se utilizan en archivos de mapeo XML:
<select id="obtenerUsuario" parameterType="entero" resultType="usuario">
SELECT * FROM usuarios WHERE id = #{id}
</select>
Durante el procesamiento, MyBatis convierte los alias "entero" y "usuario" en las clases Java correspondientes utilizando TypeAliasRegistry.