Introducción a Ibatis

De ChuWiki

Vamos a ver aquí una pequeña introducción de qué es Ibatis y cómo usarlo. De todas formas, no es más que una pequeña introducción. Ibatis, por supuesto, tiene muchísimas más posibilidades y tendrás que leerte luego el tutorial para empezar y el manual del desarrollador para profundizar.

La idea de Ibatis es poner en ficheros XML todas las sentencias SQL necesarias para nuestra aplicación. A cada una de ellas se le asigna un nombre, de forma que para usarla desde código, sólo tendremos que recordar dicho nombre.

En esas sentencias SQL que están en el fichero XML se pueden poner variables, de forma que luego en tiempo de ejecución esas variables serán reemplazas por valores concretos.

También, en el fichero XML y asociado a la sentencia SQL se dice qué clase Java contiene esas variables o qué clase Java es la que debe devolver la sentencia SQL. Dichas clases Java pueden ser clases estándar de Java, como Hashtable, o bien Java Beans. De esta forma, las variables que hayamos puesto en la sentencia SQL se considerarán como claves del Hashtable o bien como propiedades que se puedan obtener con métodos get del Java Bean.

Por ejemplo, si en el fichero XML ponemos esto

<select id="getPerson" 
      parameterClass="examples.domain.Person" 
      resultClass="examples.domain.Person">
   SELECT
      PER_ID as id,
      PER_FIRST_NAME as firstName,
      PER_LAST_NAME as lastName,
      PER_BIRTH_DATE as birthDate,
      PER_WEIGHT_KG as weightInKilograms,
      PER_HEIGHT_M as heightInMeters
      FROM PERSON
   WHERE PER_ID = #id#
</select>

parameterClass le indica a Ibatis el tipo de clase que va a recibir para rellenar las variables que necesite rellenar, en este caso, el #id# para la cláusula WHERE. resultClass le indica a Ibatis qué tipo de clase debe construir para guardar el resultado.

En el ejemplo, habiendo puesto tanto en parameterClass como en resultClass que son examples.domain.Person, Ibatis entenderá que la clase examples.domain.Person es un Java Bean y que podrá rellenarlo con métodos setId(), setFirstName(), setLastName(), etc. También, para la cláusula WHERE, entiende que #id# lo obtendrá de una clase examples.domain.Person por medio del método getId().

El atributo resultClass debemos ponerlo si queremos que la consulta nos devuelva algo. Sin embargo, parameterClass es opcional. Ibatis intentará arreglarse para obtener lo que necesite del parámetro que le pasemos de entrada. De todas formas, por eficiencia, se aconseja poner siempre poner el parameterClass, facilitando a Ibatis el cómo obtener los datos necesarios.

Desde código, tendremos que hacer algo como esto

examples.domain.Person unaPersona = new examples.domain.Person();
unaPersona.setId(22);
unaPersona = (examples.domain.Person)unaClaseEspecialDeIbatis.queryForObject("getPerson", unaPersona);

Hemos puesto el nombre de la consulta getPerson y le hemos pasado un parámetro unaPersona de tipo examples.domain.Person. Este parámetro es el parameterClass del fichero XML y a partir del cual intentará Ibatis obtener el #id#.

El valor devuelto por esta llamada será del tipo que indicamos en el resultClass del fichero XML.