2009-10-28 25 views
17

Estoy usando iBATIS para crear declaraciones de selección. Ahora me gustaría poner en práctica la siguiente instrucción SQL con iBATIS:¿Cómo usar una cláusula IN en iBATIS?

SELECT * FROM table WHERE col1 IN ('value1', 'value2'); 

Con el enfoque siguiente, la declaración no se prepara correctamente y no devuelve un resultado:

SELECT * FROM table WHERE col1 IN #listOfValues#; 

iBATIS parece reestructurar esta lista y intenta interpretarlo como una cadena.

¿Cómo puedo utilizar la cláusula IN correctamente?

Respuesta

31

Aquí es un blog que responda a su pregunta:

iBatis: Support for Array or List Parameter with SQL IN Keyword

<select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
select * from my_table where col_1 in 
    <iterate open="(" close=")" conjunction=","> 
    #[]# 
    </iterate> 
</select> 

Y en Java debe pasar en un java.util.List . P.ej.

List<String> list = new ArrayList<String>(3); 
list.add("1"); 
list.add("2"); 
list.add("3"); 
List objs = sqlMapClient.queryForList("select-test",list); 
+0

todo esto xml me da ganas de vomitar, pero gracias a la información muy útil para un proyecto donde tengo que usar ibatis – Rick

+2

No puedo creer que acabo de votar una pregunta/respuesta iBatis. ¿Cuándo terminará este proyecto y puedo dejar de usar iBatis? –

+1

Nah, iBatis es fantástico. Al menos puedes escribir SQL en lugar de alguna otra abominación. –

11

¿Qué tal

<select id="foo" parameterClass="Quuxly" resultClass="Flobitz"> 
    select * from table 
    <dynamic prepend="where col1 in "> 
     <iterate property="list_of_values" open="('" close="')" conjunction=", "> 
      #list_of_values[]# 
     </iterate> 
    </dynamic> 
</select> 
+0

Gracias, fui demasiado estúpido para investigar, cómo se ve. – guerda

+0

Gracias, me salvaste la vida: D – glider

4

O:

<select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
select * from table where 
<iterate property="list" conjunction="OR"> 
    col1 = #list[]# 
</iterate> 
</select> 
-1

Usted puede utilizar de esta manera:

<select id="select-test" resultMap="MyTableResult" > 
select * from my_table where col_1 in 
$listOfValues$ 
</select> 

utilizar los $ en el estado de Indiana.

+0

esto genera algo así como [aaa, abb, acc] puede sugerir cómo puedo cambiar este '(]' predeterminado en '()' porque el oráculo no es compatible con '[]' – Saif

0
<select id="select-test" parameterClass="list"resultMap="YourResultMap"> 
    select * from table where col_1 IN 
    <iterate open="(" close=")" conjunction=","> 
     #[]# 
    </iterate> 
</select> 
+1

¿Te importa comentar tu código? Si hay otra respuesta aceptada de hace 2 años con 9 votos ascendentes, ¿qué agrega su respuesta tan importante que puede ser una respuesta útil? – Yaroslav

0

Una cuestión de edad, sino también para los usuarios de MyBatis, la sintaxis es un poco diferente:

<select id="selectPostIn" resultType="domain.blog.Post"> 
    SELECT * 
    FROM POST P 
    WHERE ID in 
    <foreach item="item" index="index" collection="list" 
     open="(" separator="," close=")"> 
     #{item} 
    </foreach> 
</select> 

Consulte la guide in here.

Cuestiones relacionadas