1、一对多(使用集合collection)
实体类
Teacher类
package com.wen.pojo;
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
//一个老师拥有多个学生,通过这个描述老师和同学联系起来
private List<Student> studentList;
}
Student类
package com.wen.pojo;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private int tid;
}
结果嵌套查询(推荐使用)
<mapper namespace="com.wen.dao.TeacherMapper">
<!-- 按结果嵌套查询-->
<select id="getTeacher1" resultMap="teacherMap1">
select t.id t_id,t.name t_name,s.id s_id,s.name s_name from student s,teacher t where s.tid=t.id and t.id=#{tid}
</select>
<resultMap id="teacherMap1" type="Teacher">
<result property="id" column="t_id"/>
<result property="name" column="t_name"/>
<!--
一对多使用集合collection
集合泛型使用ofType,不用javaType
-->
<collection property="studentList" ofType="Student">
<result property="id" column="s_id"/>
<result property="name" column="s_name"/>
<result property="tid" column="t_id"/>
</collection>
</resultMap>
</mapper>
查询嵌套处理
<mapper namespace="com.wen.dao.TeacherMapper">
<select id="getTeacher2" resultMap="teacherMap2">
select * from teacher where id = #{tid}
</select>
<resultMap id="teacherMap2" type="Teacher">
<result property="id" column="id"/>
<collection property="studentList" ofType="Student" javaType="ArrayList" select="getStudent" column="id"/>
</resultMap>
<select id="getStudent" resultType="Student">
select * from student where tid=#{id}
</select>
</mapper>
2、多对一(使用关联association)
Student类
package com.wen.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
@Data
public class Student {
private int id;
private String name;
//学生关联老师的操作
private Teacher teacher;
}
Teacher类
package com.wen.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
public class Teacher {
private int id;
private String name;
}
结果嵌套查询
<mapper namespace="com.wen.dao.StudentMapper">
<select id="getStudent2" resultMap="StudentTeacher2">
select s.id s_id,s.name s_name,t.id t_id,t.name t_name from student s,teacher t where s.tid = t.id
</select>
<resultMap id="StudentTeacher2" type="Student">
<result property="id" column="s_id"/>
<result property="name" column="s_name"/>
<association property="teacher" javaType="Teacher">
<result property="id" column="t_id"/>
<result property="name" column="t_name"></result>
</association>
</resultMap>
</mapper>
查询嵌套
<mapper namespace="com.wen.dao.StudentMapper">
<!-- 查询所有的学生信息-->
<!-- 根据查询出来的学生的tid,寻找对应的老师-->
<select id="getStudent" resultMap="StudentTeacher">
select * from mybatis.student
</select>
<resultMap id="StudentTeacher" type="com.wen.pojo.Student">
<!-- 复杂的属性,association:对象,collection:集合-->
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="getTeacher" resultType="com.wen.pojo.Teacher">
select * from teacher where id = #{id}
</select>
</mapper>
javaType和ofType的区别
JavaType:用来指定实体类中的属性的类型
ofType:用来指定映射到List中的pojo类型,泛型中的约束类型。