2010-07-29 7 views
6

Ich habe eine Liste von Objekten, die ich in ibatis sql durchlaufen und auf ein bestimmtes Feld zugreifen möchte.Iterate Liste der Objekte in Ibatis

Ex.

public Class Student 
{ 
String id; 
String name; 
} 

I als Parameter eine Liste der Studenten Objekt (List (Student))
und tun Iteration Zugriff auf die ID für jedes Objekt Bohne passieren. Wie mache ich das?

Antwort

11

Die foreach -tag ist das, was Sie suchen. Beispiel:

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

Siehe user guide für weitere Informationen, Kapitel "Dynamic SQL".

Übrigens ist iBatis nicht mehr entwickelt und eingefroren, es heißt jetzt "MyBatis" und das gesamte Entwicklerteam ist von Apache auf new MyBatis home umgezogen.

+0

danke. Ich werde versuchen zu sehen, ob das in ibatis2 existiert und vielleicht zu mybatis wechseln. – cedric

5

Ein einfaches Beispiel.

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

Siehe iBatis documentation für weitere Informationen.

Als Sylar wies darauf hin, das Java-Äquivalent

<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 können Sie würde auf Variablen Element und Index, die Sie innerhalb der Schleife verwenden können.

+0

Das für .NET iBatis wahr ist, aber falsch für Java iBatis. In Java wird das Foreach-Tag verwendet, um über Sammlungen zu iterieren. – Sylar

+1

Ich glaube nicht, der Unterschied ist .NET vs Java, sondern ibatis2 vs ibatis3. Ich verwende ibatis2 in Java und verwende das iterate-Tag. auch mit der Syntax # [] # und nicht mit der Syntax # {}. – Dave

2

Probieren Sie etwas wie:

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

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

<select> 

wo id und name sind Felder Student Klasse und meine parameterClass ist List<Student>.

Arbeitete für mich.

Die SQL dynamisch gebildet wird wie folgt aussehen:

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

selbst erklärt, nett. – Saif

+0

Wie spezifiziert man eine Klasse, die '<' and '>' im parameterClass Attribut enthält? – RyanHennig