MyBatis之一對多處理
阿新 • • 發佈:2021-12-05
MyBatis
11、一對多處理
- 比如:一個老師擁有多個學生!
對於老師而言,就是一對多的關係!
11.1、環境搭建同多對一
-
實體類
-
public class Student { private int studentId; private String studentName; private int teacherId; }
-
public class Teacher { private Integer teacherId; private String teacherName; //一個老師有多個學生 private List<Student> students; }
-
11.2、按照查詢巢狀處理
-
<select id="getTeacherById2" resultMap="TeacherStudent2"> select * from teacher where teacher_id=#{teacher_id} </select> <resultMap id="TeacherStudent2" type="Teacher"> <result property="teacherId" column="teacher_id"></result> <result property="teacherName" column="teacher_name"></result> <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacher" column="teacher_id"></collection> </resultMap> <select id="getStudentByTeacher" resultType="Student"> select * from student where teacher_id=#{teacher_id} </select>
11.3、按照結果巢狀處理
-
<!--按照結果巢狀處理--> <select id="getTeacherById" resultMap="TeacherStudent"> select t.teacher_id tid, t.teacher_name tname, s.student_id sid,s.student_NAME sname from student s,teacher t where s.teacher_id=t.teacher_id and t.teacher_id=#{teacher_id} </select> <resultMap id="TeacherStudent" type="Teacher"> <result property="teacherId" column="tid"></result> <result property="teacherName" column="tname"></result> <!--複雜的屬性,我們需要單獨處理物件:association 集合:collection javaType="" 指定屬性的型別! 集合中的泛型資訊,我們使用ofType獲取--> <collection property="students" ofType="Student"> <result property="studentId" column="sid" ></result> <result property="studentName" column="sname" ></result> <result property="teacherId" column="tid" ></result> </collection> </resultMap>
11.4、小結
- 關聯-association 多對一
- 集合-collection 一對多
- javaType && ofType
- JavaType 用來指定實體類中屬性的型別。
- ofType 用來指定對映到List或者集合中的pojo型別,泛型中的約束型別!
11.5、注意點
- 保證SQL的可讀性,儘量保證通俗易懂。
- 注意一對多和多對一中,屬性名和欄位的問題!
- 如果問題不好排查錯誤,可以使用日誌,建議使用Log4j。
- 注意慢SQL。
11.6、面試高頻
- Mysql引擎。
- InnoDB底層原理。
- 索引。
- 索引優化。