mybatis关联查询
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