mybatis一对多的查询方法详解

来源:互联网 发布:脸部去角质 知乎 编辑:程序博客网 时间:2024/06/05 19:41

因为是用记事本写的,可能排版比较乱,所以先附上一张大图片。
这里写图片描述

首先,先新建两个实体类Teacher.java和Student.javapublic 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>这种方式比第一种方式少了一个查询语句,而且查询条件也比较灵活了。

最后附上源文件的下载路径,欢迎下载:
源文件下载地址

原创粉丝点击