多表查询
- association:对应一个对象
- collection:对应一个集合
- 核心思想就是把数据库的字段名和对象的属性对应起来。
多对一
我们有两张表一张学生n,一张老师1。多个学生对应一个老师
方式一
我们要使用Mybatis实现多表查询,我们得知道resultMap的使用
resultMap
- 查询所有学生信息
- 根据查询出来的学生的tid,寻找对应的老师!
<select id="getStudent" resultMap="Student_Ther">
select * from student
</select>
<resultMap id="Student_Ther" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="getTeacher" resultMap="Teacher">
select * from teacher where id=#{id}
</select>
这个相当于我们MySql的子查询
方式二
联表查询
<select id="getStuden" resultMap="Student_Ther">
select s.id sid, s.name sname, t.name table_name
from student s,teacher t
where s.tid=t.id
</select>
<resultMap id="Student_Ther" type="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" javaType="Teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
这个就是把查询的类型再进行类型转换<result property="name" column="tname"/>
一对多
和上面的一样只不过使用的是collection
<select id="getStuden" resultMap="Teacher_Stu">
select s.id sid, s.name sname, t.name tname,t.id tid
from student s,teacher t
where s.tid=t.id and t.id=#{tid}
</select>
<resultMap id="Teacher_Stu" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="name" column="tid" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>