我们先来看看下图所示的例子,学生和老师之间就是一种多对一的关系。
- 对于学生这边而言,多个学生关联一个老师【多对一】;这是关联
- 对于老师这边而言,一个老师包含多个学生【一对多】;这是集合
- 测试多对一实例
数据库表如下图所示:
步骤一:构造学生实体类Student.java
package com.hpf.bean;
import lombok.Data;
@Data
public class Student {
private int id;
private String stuName;
//每个学生都要关联一个老师
private Teacher teacher;
}
步骤二:编写StudentMapper.java接口类
package com.hpf.dao;
import com.hpf.bean.Student;
import java.util.List;
public interface StudentMapper {
//方式一:查询所有学生的信息,并且包含学生对应的老师的信息
public List<Student> getStudent();
//方式二:联表查询
public List<Student> getStudent2();
}
步骤三:编写xml映射配置文件(方式一)
<mapper namespace="com.hpf.dao.StudentMapper">
<select id="getStudent" resultMap="stu-tea">
select * from student;
</select>
<resultMap id="stu-tea" type="student">
<result property="id" column="id"/>
<result property="stuName" column="stu_name"/>
<!--对于复杂的属性,我们需要单独处理,处理的对象用association-->
<association property="teacher" column="tea_id" javaType="Teacher" select="getTeacherById"/>
</resultMap>
<select id="getTeacherById" resultType="Teacher">
select * from teacher where id=#{id};
</select>
</mapper>
思路:
1.查询所有学生信息;
2.根据查询的学生id,寻找对应的老师信息。
这是sql语句的子查询方式,也就是嵌套查询。
编写xml映射配置文件(方式二)
<mapper namespace="com.hpf.dao.StudentMapper">
<select id="getStudent2" resultMap="stu-tea2">
select s.id,stu_name,tea_name
from student s,teacher t
where s.tea_id = t.id
</select>
<resultMap id="stu-tea2" type="Student">
<result property="id" column="id"/>
<result property="stuName" column="stu_name"/>
<association property="teacher" javaType="Teacher">
<result property="id" column="id"/>
<result property="teaName" column="tea_name"/>
</association>
</resultMap>
</mapper>
思路:
sql语句的联表查询。