tags:

views:

132

answers:

2

Hi. I have a list of object where I want to iterate and access a particular field in ibatis sql.

Ex.

public Class Student
{
String id;
String name;
}

I will pass as parameter a List of Student object(List(Student))
and do iteration accessing the id for each object bean. How do I do this?

+1  A: 

A simple example.

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

Refer iBatis documentation for more info.

As Sylar pointed out, the java equivalent would be

<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 allows you to variables item and index which you can use inside the loop.

chedine
This is true for .NET iBatis, but false for Java iBatis. In Java, the foreach tag is used to iterate over collections.
Sylar
+1  A: 

The foreach-tag is what you are looking for. Example:

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

See the user guide for more info, chapter "dynamic sql".

By the way, iBatis is no longer developed and is frozen, it is now called "MyBatis" and the whole developer team moved away from Apache to the new MyBatis home.

Sylar
thanks. I'll try to see if this exists in ibatis2 and maybe change to mybatis.
cedric