J'utilise iBATIS pour créer des instructions select. Maintenant, j'aimerais implémenter l'instruction SQL suivante avec iBATIS:
SELECT * FROM table WHERE col1 IN ('value1', 'value2');
Avec l'approche suivante, l'instruction n'est pas préparée correctement et aucun résultat n'est renvoyé:
SELECT * FROM table WHERE col1 IN #listOfValues#;
iBATIS semble restructurer cette liste et tente de l'interpréter comme une chaîne.
Comment utiliser la clause IN correctement?
Voici un article de blog qui répond à votre question:
iBatis: prise en charge du mot clé Array ou List Parameter avec SQL IN
<select id="select-test" resultMap="MyTableResult" parameterClass="list">
select * from my_table where col_1 in
<iterate open="(" close=")" conjunction=",">
#[]#
</iterate>
</select>
Et en Java, vous devez passer un fichier Java.util.List. Par exemple.
List<String> list = new ArrayList<String>(3);
list.add("1");
list.add("2");
list.add("3");
List objs = sqlMapClient.queryForList("select-test",list);
Que diriez-vous
<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>
Ou:
<select id="select-test" resultMap="MyTableResult" parameterClass="list">
select * from table where
<iterate property="list" conjunction="OR">
col1 = #list[]#
</iterate>
</select>
<select id="select-test" parameterClass="list"resultMap="YourResultMap">
select * from table where col_1 IN
<iterate open="(" close=")" conjunction=",">
#[]#
</iterate>
</select>
Une vieille question, mais pour les utilisateurs de MyBatis, la syntaxe est un peu différente:
<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>
Reportez-vous au guide ici .