2010-07-29 43 views
6

Tôi có một danh sách đối tượng mà tôi muốn lặp lại và truy cập một trường cụ thể trong sql ibatis.Danh sách lặp lại của các đối tượng trong Ibatis

Ví dụ:

public Class Student 
{ 
String id; 
String name; 
} 

tôi sẽ vượt qua như tham số một danh sách các đối tượng sinh viên (Danh sách (Student))
và làm lặp truy cập vào id cho mỗi đậu đối tượng. Làm thế nào để tôi làm điều này?

Trả lời

11

foreach -tag là những gì bạn đang tìm kiếm. Ví dụ:

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

Xem user guide để biết thêm thông tin, chương "dynamic sql".

Nhân tiện, iBatis không còn được phát triển và bị đóng băng, bây giờ nó được gọi là "MyBatis" và toàn bộ nhóm phát triển đã chuyển từ Apache sang số new MyBatis home.

+0

cảm ơn. Tôi sẽ cố gắng để xem nếu điều này tồn tại trong ibatis2 và có thể thay đổi để mybatis. – cedric

5

Ví dụ đơn giản.

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

Tham khảo iBatis documentation để biết thêm thông tin.

Như Sylar chỉ ra, java tương đương sẽ là

<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 cho phép bạn biến mục và chỉ số mà bạn có thể sử dụng bên trong vòng lặp.

+0

Điều này đúng cho .NET iBatis, nhưng sai cho Java iBatis. Trong Java, thẻ foreach được sử dụng để lặp qua các bộ sưu tập. – Sylar

+1

Tôi không nghĩ sự khác biệt là .NET vs Java nhưng ibatis2 vs ibatis3. Tôi đang sử dụng ibatis2 trong Java và sử dụng thẻ lặp. cũng sử dụng cú pháp # [] # chứ không phải cú pháp # {}. – Dave

2

Hãy thử một cái gì đó như:

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

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

<select> 

nơi idname là lĩnh vực Student lớp và parameterClass của tôi là List<Student>.

Làm việc cho tôi.

Các sql hình thành động sẽ trông giống như:

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

tự giải thích, tốt đẹp. – Saif

+0

Làm cách nào để bạn chỉ định một lớp có chứa '<' and '>' trong thuộc tính parameterClass? – RyanHennig

Các vấn đề liên quan