Хотя нет существенной разницы, как упоминалось в других статьях, общая причина использования for (;;)
вместо while (1)
состоит в том, что инструменты статического анализа (и некоторые компиляторы с определенными уровнями предупреждений) часто жалуются на цикл while. 114]
Goto немного неприятен, но должен генерировать тот же код, что и остальные. Лично я придерживаюсь for (;;)
(чтобы Линт был доволен), но у меня нет проблем с while (1)
.
Вот сообщение в блоге, которое отвечает на ваш вопрос:
iBatis: Поддержка параметра массива или списка с ключевым словом SQL IN
<select id="select-test" resultMap="MyTableResult" parameterClass="list">
select * from my_table where col_1 in
<iterate open="(" close=")" conjunction=",">
#[]#
</iterate>
</select>
А в Java вы должны передать java.util.List. Например,
List<String> list = new ArrayList<String>(3);
list.add("1");
list.add("2");
list.add("3");
List objs = sqlMapClient.queryForList("select-test",list);
Как насчет
<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>
Или:
<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" resultMap="MyTableResult" >
select * from my_table where col_1 in
$listOfValues$
</select>
используйте $ в операторе IN.