我有一个对象列表,我想迭代并访问ibatis sql中的特定字段。
实施例。
public Class Student
{
String id;
String name;
}
我将作为参数传递给学生对象列表(列表(学生))
并迭代访问每个对象bean的id。我该怎么做?
答案 0 :(得分:12)
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。
答案 1 :(得分:5)
一个简单的例子。
<select id="selectFewStudents" resultMap="MyMap" parameterClass="list">
select * from student_table where student_id in
<iterate open="(" close=")" conjunction=",">
#[]#
</iterate>
</select>
有关详细信息,请参阅iBatis documentation。
正如Sylar指出的那样,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允许您使用可在循环内使用的变量项和索引。
答案 2 :(得分:2)
尝试类似:
<select id="StudentsQry" parameterClass="list">
select * from STUDENTS where
( id, name ) in
<iterate open="(" close=")" conjunction="," >
( #[].id# , #[].name# )
</iterate>
<select>
其中id
和name
是Student
类的字段,而我的parameterClass
是List<Student>
。
为我工作。
动态形成的sql将如下所示:
select * from STUDENTS where ( id, name ) in ( (1,'a'), (2,'b') )