Análisis del Registro de Alias de Tipos en MyBatis

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.

Etiquetas: MyBatis TypeAliasRegistry java ORM configuration

Publicado el 9-5 14:18