1. 程式人生 > 其它 >MyBatis之一對多處理

MyBatis之一對多處理

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底層原理。
  • 索引。
  • 索引優化。