因为是用记事本写的,可能排版比较乱,所以先附上一张大图片。
首先,先新建两个实体类Teacher.java和Student.java
public class Teacher {
private Integer teacherId;
private String teacherName;
//getXxx()和setXxx()方法省略
}
public class Student {
private String studentName;
private String studentAddr;
private Integer teacherId;
//getXxx()和setXxx()方法省略
}
他们的关系是:一(个老师)对应多(个学生),通过teacherId进行关联。
**************************************************************************************************************
------------------------------------------------第一种方式----------------------------------------------------
**************************************************************************************************************
1、首先在Teacher.java中添加一个List<Student>集合,表示多个学生。
修改之后的Teacher.java类:
public class Teacher {
private String teacherName;
private Integer teacherAge;
private List<Student> stuList;
//getXxx()和setXxx()方法省略
}
2、接下来就是在Mapper.xml中做文章了。
2.1、StudentMapper.xml中的字段映射就安装正常的字段映射来写就可以了。
2.2、TeacherMapper.xml文件
<resultMap id = "TeacherResultMap" type = "Teacher.java的路径">
<result column = "表字段名" property = "属性名" />
....
<!--
************************************
* 重点就在这里 *
************************************
-->
<collection property="stuList" column="teacherId" javaType="ArrayList"
ofType="Student实体类路径" select="getStudentByTeacherId"/>
<!--
************************************
* property是关联的字段,ofType是查*
* 询返回的学生信息对应的实体类, *
* select为要执行的查询学生列表的 *
* 查询语句。 *
************************************
-->
</resultMap>
<resultMap id="StudentResultMap" type="Student实体类路径">
<result property="studentName" column="studentName" />
<result property="studentAddr" column="studentAddr" />
...
</resultMap>
<select id="getTeacherByID" resultMap="TeacherResultMap" parameterType="java.lang.Integer" >
select teacherId,teacherName
from teacher
where teacherId = #{teacherId}
</select>
<select id="getStudentByTeacherId" resultMap="StudentResultMap" parameterType="java.lang.Integer" >
select studentName,studentAddr,teacherId
from student_t
where teacherId = #{teacherId}
</select>
这个时候,通过getTeacherByID就可以查出一个教师的信息和每个教师所对应的学生信息。
这种方式可能适用于查询条件就是两张表的关联字段,如果查询条件是其它字段的话,可能就不适用于这种了。
**************************************************************************************************************
------------------------------------------------第二种方式----------------------------------------------------
**************************************************************************************************************
第二种方式和第一种方式差不多,主要有以下几点的区别:
1、还是TeacherMapper.xml的配置文件中的字段映射:
<collection property="stuList" ofType="Student实体类路径" resultMap="StudentResultMap"/>
2、这个时候,就不用写两个查询语句了,而且查询条件也可以是任意的字段了,只需要一个关联查询,将你想要的查出来就可以了
<select id = "queryAll" parameterType="**" resultMap="TeacherResultMap">
SELECT a.*, b.*
FROM teacher a
LEFT JOIN student b ON a.teacher_id = b.teacher_id
WHERE 查询条件
</select>
这种方式比第一种方式少了一个查询语句,而且查询条件也比较灵活了。
最后附上源文件的下载路径,欢迎下载:
源文件下载地址