2010-07-29 101 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