场景
实际应用中,在班集与学生信息检索中,有时我们只需要得到班集信息即可,无需将班集里的学生信息也检索出来。但有些情况却是需要将班集里所有学生的信息检索出来。此时可以使用Mybatis里collection标签的延迟加载来达到按需加载所需数据的目的。实例
Student.java
public class Student {
private String id;
private String name;
private int age;
private String sex;
private int classCode;
public void setName (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
}
StudentMapper.java
public interface StudentMapper {
Student getStudentInfoById (String id);
}
StudentMapper.xml
<select id="getStudentInfoById" type="com.cat.pojo.Student">
SELECT name, age, sex, class_code FROM student WHERE class_code = #{class_code}
</select>
ClassInfo.java
public class ClassInfo {
private int classCode;
private String className;
private List<Student> students;
public void setClassCode (int classCode) {
this.classCode = classCode;
}
public String getClassCode () {
return this.classCode;
}
}
ClassInfoMapper.java
public interface ClassInfoMapper {
ClassInfo getStudentsByClassCode (String classCode) ;
}
ClassInfoMapper.xml
<select id="getStudentsByClassCode" resultMap="classAndStudentMap">
SELECT class_code, class_name
FROM class
WHERE class_code = #{class_code}
</select>
<resultMap id="classAndStudentMap" type="com.cat.pojo.ClassInfo">
<result column="class_code" property="classCode" />
<result column="class_name" property="className" />
<collection property="students" select="com.cat.mapper.StudentMapper.getStudentInfoById" column="class_code"/>
</resultMap>