11、一对多处理
1.搭建素材,和上一章相同
实体类:
@Data
public class Student {
private Integer id;
private String name;
private Integer tid;
}
@Data
public class Teacher {
private Integer id;
private String name;
//一个老师拥有多个学生
private List<Student> students;
}
按照结果查询处理
<!--按结果嵌套查询-->
<select id="getTeacher" resultMap="TeacherStudent">
SELECT t.name tname,t.id,tid,s.id sid,s.name sname
from student s,teacher t
where t.id = s.tid and t.id = #{tid}
</select>
<resultMap id="TeacherStudent" type="teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<!--复杂的属性,我们需要单独处理 对象:association 集合:collection
Javatype 指定属性的类型!
集合中的泛型信息,我们使用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 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 student where tid=#{tid}
</select>
小结
1.关联--->association【多对一】
2.集合--->collection【一对多】
3.javaType & ofType
1.javaType用来指定实体类中属性的类型
2.ofType 用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
注意点:
-
保证SQL的可读性,尽量保证通俗易懂
-
注意一对多和多对一,属性名和字段的问题
-
如果问题不好排查错误,可以使用日志
面试高频
-
Mysql引擎
-
InnoDB底层原理、
-
索引
-
索引优化