09/04/2014

iBatis y HashMap

Cuando se utiliza iBatis o MyBatis, como se llama actualmente el paquete, muchas veces resulta tedioso tener que crear clases que incluyan como atributos todos lo campos a recuperar de una query, para evitarlo hay una alternativa muy sencilla, que puede resultar un poco complicado encontrar.

MyBatis logo
MyBatis logo

La alternativa es crear un java.util.HashMap como resultClass y ejecutar la query con un queryForList. A continuación incluyo un ejemplo lo más sencillo y claro posible.

[pastacode provider=»manual» lang=»markup»]


    
        
        
        
    

[/pastacode]

No es necesario que los nombres de las property coincidan con los nombres de las column.

[pastacode provider=»manual» lang=»sql»]

[/pastacode]

Los nombres que se utilizan al definir las columnas del resultMap, tienen que coincidir con el resultado de la ejecución de la query.

[pastacode provider=»manual» lang=»java»]

List data = (List)sqlMap.queryForList("nombre-de-la-query", id);
for( HashMap temp : data){
    System.out.println((String)temp.get("VAL1"));
    System.out.println((String)temp.get("VAL2"));
    System.out.println((String)temp.get("VAL3"));
}

[/pastacode]

Para acceder a las propiedades, utilizaremos el nombre definido en el resultMap como property.

Esta manera de recuperar información con iBatis nos permite realizar consultas complejas y utilizar objetos preexistentes para guardar o utilizar la información; aunque nos libera de la necesidad de crear las clases con los objetos ad-hoc para cada una de las consultas, lo que puede agilizar sensiblemente la construcción de las consultas.