2010-07-29 104 views
6

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

Ex。

public Class Student 
{ 
String id; 
String name; 
} 

我将通过为参数Student对象(名单(学生))
的名单,做迭代访问ID为每个对象的bean。我该怎么做呢?

回答

11

The 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

+0

谢谢。我会试着看看这是否存在于ibatis2中,也许会改为mybatis。 – cedric 2010-08-02 04:10:32

5

一个简单的例子。

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

有关更多信息,请参阅iBatis documentation

正如塞勒指出的是,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的让你的变量项目和索引,你可以在循环中使用。

+0

这是.NET的iBatis真实的,但假的Java iBatis的。在Java中,foreach标记用于迭代集合。 – Sylar 2010-07-29 07:52:54

+1

我不认为差异是.NET与Java,但是ibatis2与ibatis3。我在Java中使用ibatis2并使用迭代标记。也使用#[]#语法而不是#{}语法。 – Dave 2011-03-10 16:46:35

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')) 
+0

自我解释,很好。 – Saif 2014-08-26 09:43:01

+0

如何在parameterClass属性中指定包含'<' and '>'的类? – RyanHennig 2016-05-03 20:50:30