实体类学生
@Data
public class Student {
private Integer id;
private String name;
private Integer tid;
//学生要关联一个老师 多对一
private Teacher teacher;
public Student(){
}
public Student(Integer id,String name){
}
}
实体类老师
@Data
public class Teacher {
private Integer id;
private String name;
//一个老师拥有多个学生 一对多
private List<Student> students;
public Teacher(){
}
public Teacher(Integer id,String name){
}
}
mapper.xml配置文件的设置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yin.mapper.TeacherMapper">
<select id="getTeacher1" resultType="Teacher">
select * from teacher ;
</select>
<select id="getTeacher2" resultMap="TeacherStudent">
select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid =t.id and t.id =#{id};
</select>
<resultMap id="TeacherStudent" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
<!-- =========================================================-->
<select id="getTeacher3" resultMap="TeacherStudent2">
select * from teacher where id=#{id};
</select>
<resultMap id="TeacherStudent2" type="Teacher">
<collection property="students" column="id" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId"></collection>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
select * from student where tid=#{id};
</select>
</mapper>
分析
对于一对多的关系模式种,要使用到collection来聚合所要查询的数据,其中返回的类型使用到的是oftype进行设置