迭代Ibatis中的对象列表

时间:2010-07-29 06:46:19

标签: java sql ibatis

我有一个对象列表,我想迭代并访问ibatis sql中的特定字段。

实施例。

public Class Student
{
String id;
String name;
}

我将作为参数传递给学生对象列表(列表(学生))
并迭代访问每个对象bean的id。我该怎么做?

3 个答案:

答案 0 :(得分:12)

foreach -tag就是你要找的。例如:

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

有关详细信息,请参阅user guide,“动态sql”一章。

顺便说一句,iBatis不再开发并被冻结,它现在被称为“MyBatis”,整个开发团队从Apache迁移到new MyBatis home

答案 1 :(得分:5)

一个简单的例子。

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

有关详细信息,请参阅iBatis documentation

正如Sylar指出的那样,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允许您使用可在循环内使用的变量项和索引。

答案 2 :(得分:2)

尝试类似:

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

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

<select>

其中idnameStudent类的字段,而我的parameterClassList<Student>

为我工作。

动态形成的sql将如下所示:

select * from STUDENTS where ( id, name ) in ( (1,'a'), (2,'b') )