Monday, August 06, 2007

Como utilizar el Iterate en IBatis para construir sentencia IN en SQL.

Primeramente creamos un Bean que contenga un tipo Collection ya que no se pude pasar el atributo directamente se tiene que mandar forsosamente atraves de un Bean.

Ejemplo :


public class Bean {
List collection;

public void setCollection(List collection) {
this.collection = collection;
}

public List getCollection() {
return collection;
}
}

En este caso se define el alias de localización del archivos en la parte superior del archivo XML y solo abajo de

<sqlMap namespace="_XML_" >
<typeAlias alias="Bean" proyecto.vo.Bean" />
<select id="SelecICVE" resultClass="xml" parameterClass="Bean">
</select>
y se utiliza de en la parte de parameterClass="Bean" o se puede colocar la ruta del archivo directamente en la parte de parameterClass="proyecto.vo.Bean" desde mi punto de vista es lo mismo simplemente depende de la forma en que se quiera utilizar.

<select id="SelecBean" resultClass="xml" parameterClass="Bean">
SELECT * FROM TABLA WHERE DATO = 'DATO'
<iterate prepend=" AND CAMPOBD IN " property="collection" open="(" close=")" conjunction=",">
#collection[]#
</iterate>
</select>

prepared="AND CAMPODB IN " <-- Es la instrucción que se agregara despues de 'DATO'
property="collection" <-- Definida en Bean
resultClass = "xml" <-- El valor que nos devuelve la consulta en tipo XML Nota: La columna que no tiene valor en la consulta no lo agrega a la estructura del XML.
open="(" y close=")" <-- Valores opcionales aunque en mi caso si los utilizo para la instrucción.
conjunction = "," <-- En mi caso si la utilizo porque puede ir uno o varios valores separados por ","

No comments: