Как использовать предложение IN в iBATIS? - PullRequest
17 голосов
/ 28 октября 2009

Я использую iBATIS для создания операторов выбора. Теперь я хотел бы реализовать следующий оператор SQL с iBATIS:

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

При следующем подходе оператор подготовлен неправильно и результат не возвращается:

SELECT * FROM table WHERE col1 IN #listOfValues#;

iBATIS, кажется, реструктурирует этот список и пытается интерпретировать его как строку.

Как правильно использовать предложение IN?

Ответы [ 6 ]

32 голосов
/ 28 октября 2009

Вот запись блога, которая отвечает на ваш вопрос:

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);
12 голосов
/ 28 октября 2009

Как насчет

<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>
4 голосов
/ 30 апреля 2010

Или:

<select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
 select * from table where
 <iterate property="list" conjunction="OR">
  col1 = #list[]#
 </iterate>
</select>
0 голосов
/ 22 декабря 2017

Старый вопрос, но для пользователей MyBatis синтаксис немного другой:

<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>

См. Руководство здесь .

0 голосов
/ 13 сентября 2012
<select id="select-test" parameterClass="list"resultMap="YourResultMap">
     select * from table where col_1 IN 
     <iterate open="(" close=")" conjunction=",">
      #[]#
    </iterate>
</select>
0 голосов
/ 23 июня 2010

Вы можете использовать это так:

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

используйте $ в операторе IN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...