MyBatis中<collection>
标签的使用
使用<collection>
进行一对多的查询
下面的栗子要输出每个班级和其学生列表
表结构和数据:
class表:
+------+
| c_id |
+------+
| 1 |
| 2 |
| 3 |
+------+
student表:
+------+--------+-------+
| s_id | s_name | s_cid |
+------+--------+-------+
| 1 | sc | 1 |
| 2 | ljl | 1 |
| 3 | xh | 2 |
| 4 | wxp | 3 |
+------+--------+-------+
对应的Javabean:
student:
public class Student {
private int sId;
private String sName;
//get(),set()...
}
class:
public class Clazz {
private int cId;
private List<Student> cStu;
//get(),set()...
}
ClazzMapper接口:
public interface ClazzMapper {
List<Clazz> queryClazzList();
}
ClazzMapper.xml文件:
...
<resultMap id="cl" type="com.example.domain.Clazz">
<result property="cId" column="c_id"/>
<collection property="cStu" ofType="com.example.domain.Student">
<result property="sId" column="s_id"/>
<result property="sName" column="s_name"/>
</collection>
</resultMap>
<select id="queryClazzList" resultMap="cl">
SELECT c.c_id,s.s_id,s.s_name
FROM class c
LEFT JOIN student s
ON c.c_id=s.s_cid
</select>
...
打印查询结果:
Clazz{cId=1, cStu=[Student{sId=1, sName='sc'}, Student{sId=2, sName='ljl'}]},
Clazz{cId=2, cStu=[Student{sId=3, sName='xh'}]},
Clazz{cId=3, cStu=[Student{sId=4, sName='wxp'}]}