mybatis關聯查詢
第一步,在實體類裏面創建要放進去的對象
第二步,使用註解@Transient
使用這個註解可以防止使用通用mapper的時候報錯,可以理解爲它標誌不是數據庫字段,方便以後擴展
第三步,寫sql語句
SELECT <!--關聯班級 --> tc.id AS tb_class_id,tc.number,tc.name AS tc_class_name, <!--關聯小組 --> sg.group_id,sg.group_name, <!--關聯實驗 --> e.experiment_id,e.experiment_name,e.experiment_presentation, <!--關聯成員 --> sgs.group_student_id, <!--學生個人 --> si.id AS stu_id,si.name AS stu_name, <!--學號 --> u.username, <!--考勤 --> ci.clocking_id,ci.status,ci.clocking_time, <!--成績 --> sef.submit_experiment_file_id,sef.submit_status FROM tb_class tc LEFT JOIN scourse_group sg ON sg.class_id = tc.id LEFT JOIN experiment e ON e.experiment_id = sg.experiment_id LEFT JOIN scourse_group_student sgs ON sgs.group_id = sg.group_id LEFT JOIN student_info si ON si.id = sgs.group_student_id LEFT JOIN USER u ON u.id = si.id LEFT JOIN clocking_in ci ON ci.student_id = si.id LEFT JOIN submit_experiment_file sef ON sef.submitter_id = si.id WHERE tc.id IN ( SELECT DISTINCT(class_id) FROM scourse_group WHERE schedule_id = #{scheduleId}
) AND tc.stealth=2 AND sg.schedule_id=#{scheduleId} AND ci.schedule_id=#{scheduleId} AND sef.schedule_id=#{scheduleId} |
第四步,寫結果集映射
備註:
(1)type是實體類
(2)id是唯一標識,是resulMap指定的標識
(3)autoMapping是指定是否自動映射,如果不指定,需要指定每一個結果集
(4)collection是集合映射,用於多個對象;association是用於單個對象
(5)如果裏面有collection,又有association,應該把association放前面,不然會報錯
(6)無論是association還是collection,都要指定主鍵<id/>
(7)column是查詢數據庫時的字段,如果有別名,那這裏是別名,property是實體類的屬性,對象實體類封裝的名稱
(8)擴展:association、collection的另一種寫法,不建議使用
指定屬性,用select屬性,再去查詢數據庫,這種是屬於懶人寫法,不建議!!!!
備註:select裏面的屬性填的是xml標籤的id值,表示去執行該sql