2010-07-29 11 views
6

Ho una lista di oggetti in cui desidero iterare e accedere a un campo particolare in ibatis sql.Iterate list of Objects in Ibatis

Es.

public Class Student 
{ 
String id; 
String name; 
} 

io passare come parametro un elenco di Student oggetto (selezione (Student))
e fare iterazione Accesso al codice per ciascun bean oggetto. Come faccio a fare questo?

risposta

11

Il foreach -tag è quello che stai cercando. Esempio:

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

Vedere la user guide per maggiori informazioni, il capitolo "SQL dinamico".

A proposito, iBatis non è più sviluppato ed è congelato, ora è chiamato "MyBatis" e l'intero team di sviluppatori si è spostato da Apache allo new MyBatis home.

+0

grazie. Proverò a vedere se questo esiste in ibatis2 e forse cambierà in mybatis. – cedric

5

Un semplice esempio.

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

Per ulteriori informazioni, fare riferimento a iBatis documentation.

Come Sylar ha sottolineato, Java equivalente sarebbe

<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 consente alle variabili oggetto e l'indice che è possibile utilizzare all'interno del ciclo.

+0

Questo è vero per NET iBatis, ma falso per Java iBatis. In Java, il tag foreach viene utilizzato per iterare su raccolte. – Sylar

+1

Non penso che la differenza sia .NET vs Java ma ibatis2 vs ibatis3. Sto usando ibatis2 in Java e usando il tag iterate. anche usando la sintassi # [] # e non la sintassi # {}. – Dave

2

provare qualcosa di simile:

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

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

<select> 

dove id e name sono campi di Student classe e il mio parameterClass è List<Student>.

Ha funzionato per me.

SQL formata in modo dinamico sarà simile:

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

spiegato da me, bello. – Saif

+0

Come si specifica una classe contenente "<' and '>" nell'attributo parameterClass? – RyanHennig