查询所有学生以及老师信息
一:多对一
Student实体类
package com.hp.domain;
import lombok.Data;
/**
* @author SX
* @date 2020/8/12 -23:27
*/
@Data
public class Student {
private Integer id;
private String name;
private Teacher teacher;
}
Teacher 实体类
package com.hp.domain;
import lombok.Data;
import java.util.List;
/**
* @author SX
* @date 2020/8/12 -23:27
*/
@Data
public class Teacher {
private Integer id;
private String name;
}
对象试用association
集合使用collection
方法一:镶嵌处理
<mapper namespace="com.hp.mapper.StudentMapper">
<!--思路先查询所有学生的信息
嵌套查询
在根据外键tid 查询查询对应的老师 子查询
-->
<resultMap id="studnetmap" type="com.hp.domain.Student">
<id column="id" property="id"></id>
<result property="name" column="name"></result>
<association property="teacher" column="tid" javaType="Teacher" select="getTEAHCER"/>
</resultMap>
<select id="findStudenAndTeacher" resultMap="studnetmap">
<!-- select s.name,t.name from mybatis.student s left join mybatis.teacher t on s.tid=t.id-->
select * from mybatis.student
</select>
<select id="getTEAHCER" resultType="Teacher">
select * from mybatis.teacher where id=#{id}
</select>
</mapper>
方法二:子查询
<resultMap id="studnetmap2" type="Student">
<id property="id" column="sid" ></id>
<result property="name" column="sname"></result>
<association property="teacher" javaType="Teacher">
<id property="name" column="tname"></id>
</association>
</resultMap>
<select id="findStudenAndTeacher2" resultMap="studnetmap2">
select s.name sname,t.name tname from mybatis.student s left join mybatis.teacher t on s.tid=t.id
</select>
知识点:
子查询 :多对一 javaType 就是 一的那个实体类全类名
注意点:
对象试用association
集合使用collection
当数据库存在重复字段时 子查询: 最好查询写上别名 便于区分
二:一对多
实体类
package com.hp.domain;
import lombok.Data;
/**
* @author SX
* @date 2020/8/12 -23:27
*/
@Data
public class Studentone {
private Integer id;
private String name;
private Integer tid;
}
package com.hp.domain;
import lombok.Data;
import java.util.List;
/**
* @author SX
* @date 2020/8/12 -23:27
*/
@Data
public class Teachermost {
private Integer id;
private String name;
private List<Student> studentList;
}
方法一:嵌套查询
<resultMap id="TeacherontoMANY2" type="Teachermost">
<collection property="studentList" javaType="Arraylist" column="id" ofType="Studentone"
select="getStudnetbtTeacher"/>
</resultMap>
<select id="getTeacher2" resultMap="TeacherontoMANY2" parameterType="java.lang.Integer">
select *
from mybatis.teacher
where id = #{tid,jdbcType=INTEGER}
</select>
<select id="getStudnetbtTeacher" resultType="Studentone">
select *
from mybatis.student
where tid = #{tid}
</select>
方法二:子查询
<resultMap id="TeacherontoMANY" type="Teachermost">
<id property="id" column="tid"></id>
<result property="name" column="tname"></result>
<collection property="studentList" ofType="Studentone">
<id property="id" column="sid"></id>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
<select id="getTeacher" resultMap="TeacherontoMANY" parameterType="java.lang.Integer">
select s.id sid, s.name sname, t.name tname, t.id tid
from mybatis.teacher t,
mybatis.student s
where s.tid = t.id
and t.id = #{tid,jdbcType=INTEGER}
</select>
注意点:
嵌套查询: javatype 为arraylist集合
子查询: 多对一 子查询 ofType指定链表的那个多