多对一
实体类
student2
public class Student2 {
private int id;
private String name;
private Teacher teacher;
}
teacher
public class Teacher {
private int id;
private String name;
}
按照查询嵌套处理
<!--
思路:
1.查询所有的学生信息
2.根据查询出来的学生的tid,寻找对应的老师!
-->
<select id="getStudent2" resultMap="Student2Teacher">
SELECT * from student.student2
</select>
<resultMap id="Student2Teacher" type="Student2">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--复杂的属性,我们需要单独处理
对象:association
集合:collection
-->
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="getTeacher" resultType="Teacher">
SELECT * from student.teacher
</select>
按照结果嵌套处理
<!--按照结果嵌套-->
<select id="getStudent3" resultMap="Student2Teacher3">
SELECT s.id sid,s.name sname,t.name tname,t.id tid
from student.student2 s,student.teacher t
where s.tid = t.id;
</select>
<resultMap id="Student2Teacher3" type="Student2">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" column="Teacher">
<result property="name" column="tname"/>
<result property="id" column="tid"/>
</association>
</resultMap>
一对多
实体类
student2
public class Student2 {
private int id;
private String name;
private int tid;
}
teacher
public class Teacher {
private int id;
private String name;
private List<Student2> Students;
}
按照结果嵌套处理
<!--按照结果嵌套查询-->
<select id="getTeacher" resultMap="teacherstudent">
SELECT s.id sid,s.name sname,t.id tid,t.name tname
FROM student.teacher t ,student.student2 s
WHERE s.tid = t.id and tid = #{tid}
</select>
<resultMap id="teacherstudent" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="Students" ofType="Student2">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
按照查询嵌套处理
<select id="getTeacher2" resultMap="teaherstudent2">
select * from student.teacher where id = #{tid}
</select>
<resultMap id="teaherstudent2" type="Teacher">
<collection property="Students" javaType="ArrayList" ofType="Student2" column="id" select="getStudentByTeacherID"/>
</resultMap>
<select id="getStudentByTeacherID" resultType="Student2">
select * from student.student2 where tid = #{tid}
</select>
小结
1.关联-association【多对一】
2.集合-collection 【一对多】
3.javaType & ofType
1.JavaType 用来指定实体类中属性的类型
2.ofType 用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
注意点
- 保证SQL的可读性,尽量保证通俗易懂
- 注意一对多和多对一中,属性名和字段的问题!
- 如果问题不好排查错误,可以使用日志,建议使用Log4j