MyBatis 中进行 一对多 关联查询的时候
我们以以一个例子为例: 查询一个班级里的所有学生
配置:
<!-- 一对多 -->
<select id="queryClassAndStudent" parameterType="int" resultMap="class_student_map">
select c.*,s.* from student s inner join studentclass c
on c.classid = s.classid
where c.classid= #{classId}
</select>
<resultMap type="StudentClass" id="class_student_map">
<!--返回班级类型 所以先写班级 -->
<id property="classid" column="classid" />
<result property="className" column="className"/>
<!--ofType 一对多的特点 -->
<collection property="students" ofType="Student">
<id property="sno" column="sno" />
<result property="sname" column="sname" />
<result property="sage" column="sage"/>
</collection>
</resultMap>
班级类:
注意我们要在班级类中 加入学生集合,和学生表建立关联。
测试类
//一对多
public static void queryClassAndStudent() throws IOException {
Reader reader = Resources.getResourceAsReader("config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
/* 1.实现接口
* 2.然后接口文件的名称 与 xml中的namespace形成映射 自动绑定配置
*/
StudentMapper studentmapper = session.getMapper(StudentMapper.class);
StudentClass studentClass = studentmapper.queryClassAndStudent(1);
//遍历学生
List<Student> list = studentClass.getStudents();
for(Student student: list)
{
System.out.println(student.getName()+"--"+student.getSage());
}
//班级名
System.out.println(studentClass.getClassName());
session.close();
}
结果: