环境搭建
与多对一相似,有一些地方需要改动:
实体类:
@Data
public class Student {private int id;private String name;private int tid;}
@Data
public class Teacher {private int id;private String name;// 一个老师拥有多个学生private List<Student> students;
}
按照结果嵌套处理
<!--按结果嵌套查询--><select id="getTeacher" resultMap="TeacherStudent">select s.id sid,s.name sname,t.name tname,t.id tidfrom student s,teacher twhere s.tid = t.id and t.id = #{tid};</select><resultMap id="TeacherStudent" type="Teacher"><result property="id" column="tid"/><result property="name" column="tname"/><!--复杂属性单独处理,集合用collectionjavaType="" 指定属性的类型集合中的泛型信息,我们使用ofType获取--><collection property="students" ofType="Student"><result property="id" column="sid"/><result property="name" column="sname"/><result property="tid" column="tid"/></collection></resultMap>
按照查询嵌套处理
<select id="getTeacher2" resultMap="TeacherStudent2">select * from mybatis.teacher where id = #{tid};</select><resultMap id="TeacherStudent2" type="Teacher"><collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/></resultMap><select id="getStudentByTeacherId" resultType="Student">select * from mybatis.student where tid = #{tid}</select>
小结
1. 关联:association【多对一】
2. 集合:collection【一对多】
3. javaType & ofType
——javaType用来指定实体类中属性的类型
——ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
注意点:
· 保证SQL的可读性,尽量保证通俗易懂
· 注意一对多和多对一中,属性和字段的问题
· 如果问题不好排查错误,可以使用日志