MyBatis关联查询、多条件查询
1、一对一查询
任务需求;
根据班级的信息查询出教师的相关信息
1、数据库表的设计
班级表:
教师表:
2、实体类的设计
班级表:
public class Classes { 9 //定义实体类的属性,与class表中的字段对应 10 private int id; //id===>c_id 11 private String name; //name===>c_name 13 /** 14 * class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性, 15 * 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的 16 */ 17 private Teacher teacher; |
教师表:
public class Teacher { 9 //定义实体类的属性,与teacher表中的字段对应 10 private int id; //id===>t_id 11 private String name; //name===>t_name |
3、定义mapper接口
package com.ipcopyright.dao.read; public interface TeacherDaoR { // 级联查询班级信息带教师信息 public Classes fintClassJoinTeacher(int id); //嵌套查询 public Classes findclassjointeacher2(int id); } |
4、定义mappe.xml接口
方式一:嵌套结果——联表查询
sql查询语句:SELECT * FROM class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_id=1;
- 使用嵌套结果来处理重复的联合结果的子集
- 封装联表查询的数据(去除重复的数据)
<!-- 嵌套结果 --> <!-- 联表查询,封装结果子集 --> <select id="fintClassJoinTeacher" resultMap="baseresultMap" parameterType="int"> select * from class c ,teacher t where c.teacher_id = t.t_id and c.c_id = #{id} </select> <!-- 结果集封装 --> <!-- 使用resultMap映射实体类和字段之间的一一对应关系 --> <resultMap type="com.ipcopyright.domain.Classes" id="baseresultMap"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> |