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.

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»]
<resultMap id="myResultMap" class="java.util.HashMap">
<result property="VAL1" column="CODE" />
<result property="VAL2" column="DESCRIPTION" />
<result property="VAL3" column="VALUE" />
</resultMap>
[/pastacode]
No es necesario que los nombres de las property coincidan con los nombres de las column.
[pastacode provider=»manual» lang=»sql»]
<select id=»nombre-de-la-query» parameterClass=»java.lang.Integer» resultMap=»myResultMap»>
select
campo1 as CODE,
campo2 as DESCRIPTION,
campo3 as VALUE
from
TABLE1
where
TABLE1.ID = #id#
</select>
[/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<HashMap> data = (List<HashMap>)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.