Перебор списка объектов в Ибатисе - PullRequest
7 голосов
/ 29 июля 2010

У меня есть список объектов, в которых я хочу выполнить итерацию и получить доступ к определенному полю в ibatis sql.

Ex.

public Class Student
{
String id;
String name;
}

Я передам в качестве параметра объект списка учеников (List (Student))
и сделать итерацию доступа к идентификатору для каждого объекта EJB. Как мне это сделать?

Ответы [ 3 ]

12 голосов
/ 29 июля 2010

Тег foreach - это то, что вы ищете. Пример:

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

См. Руководство пользователя для получения дополнительной информации, глава "dynamic sql".

Кстати, iBatis больше не разрабатывается и заморожен, теперь он называется «MyBatis», и вся команда разработчиков переехала из Apache в новый дом MyBatis .

6 голосов
/ 29 июля 2010

Простой пример.

<select id="selectFewStudents" resultMap="MyMap" parameterClass="list">
    select * from student_table where student_id in
    <iterate open="(" close=")" conjunction=",">
       #[]#
    </iterate>
</select>

Подробнее см. В документации iBatis .

Как указал Сайлар, Java-эквивалент будет

<select id="selectFewStudents" resultType="MyMap">
  select * from student_table where student_id in
   <foreach item="currentRow" index="rowNum" collection="list" open="(" separator="," close=")">
    #{currentRow}
  </foreach>
</select>

iBatis позволяет вам преобразовывать элемент и индекс, которые вы можете использовать внутри цикла.

3 голосов
/ 27 февраля 2012

Попробуйте что-то вроде:

<select id="StudentsQry" parameterClass="list">

select * from STUDENTS where 
( id, name ) in 
        <iterate open="(" close=")" conjunction="," >
                ( #[].id# , #[].name# )
        </iterate>

<select>

, где id и name - поля класса Student, а мой parameterClass равен List<Student>.

..

SQL, сформированный динамически, будет выглядеть так:

select * from STUDENTS where ( id, name ) in ( (1,'a'), (2,'b') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...