mybatis两张表关联关系映射

Posted liuna369-4369

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis两张表关联关系映射相关的知识,希望对你有一定的参考价值。

一对多

方法一

<resultMap type="Teacher" id="teacherMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="students" ofType="Student" column="id">
<id column="sid" property="id"/><!-- 这里的column对应的是下面查询的别名,而不是表字段名 -->
<result column="sname" property="name"/><!-- property对应JavaBean中的属性名 -->
<result column="className" property="className"/>
</collection>
</resultMap>


<!-- 查询所有的老师级各自的所有学生 -->
<select id="getTeachers" parameterType="Teacher" resultMap="teacherMap">
SELECT
t.id,
t.NAME,
t.class_Name,
s.id AS sid,
s. NAME AS sname,
s.class_name as className
FROM
teacher t
LEFT JOIN student s ON t.id = s.teacher_id
</select>

 

方法二

<resultMap type="Teacher" id="teacherMaps">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="class_name" property="className"/>
<collection property="students" ofType="Student" select="getStudents" column="id">
</collection>
</resultMap>


<!-- 查询所有的老师级各自的所有学生 -->
<select id="getAllTeacher" parameterType="Teacher" resultMap="teacherMaps">
SELECT
t.id,
t.NAME,
t.class_name
FROM
teacher t
</select>

<select id="getStudents" parameterType="int" resultType="Student">
select
s.id,
s. NAME,
s.class_name as className
from student s
where teacher_id = #id
</select>

 

多对一

<resultMap type="Student" id="studentMap">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="class_name" property="className"/>
        <result column="teacher_id" property="teacherId"/>
        <association property="teacher" select="getTeacher" column="teacher_id" javaType="Teacher">
        <!-- 这里要注意的是column对应的是student中的外键,而且需是表字段名 -->
        </association>
    </resultMap>
    
    
    <select id="getStudent" resultMap="studentMap">
        SELECT
            s.id,
            s.name,
            s.class_name,
            s.teacher_id
        FROM
            student s
    </select>
    
    <select id="getTeacher" resultType="Teacher" parameterType="int">
        SELECT
            t.id,
            t.name,
            t.class_name as className 
        FROM teacher t 
        where id = #teacher_id
    </select>

多对多查询

 <resultMap id="courseMapper" type="Course">

        <id property="id" column="cid"/>
        <result property="name" column="cname"/>
        <collection property="students" ofType="Student">
            <id property="id" column="sid"/>
            <result property="name" column="sname"/>
        </collection>
    </resultMap>


    <select id="selectCourseStudent" resultMap="courseMapper">
        SELECT
            c.id cid, c.name cname, s.id sid, s.name sname
        FROM
            t_course c,
            t_student s,
            t_student_course sc
        WHERE
            c.id = #id
            AND s.id = sc.sid
            AND c.id = sc.cid;
    </select>

 

以上是关于mybatis两张表关联关系映射的主要内容,如果未能解决你的问题,请参考以下文章

mybatis一对一关联关系映射

MyBatis关联查询,表字段相同,resultMap映射问题的解决办法

Mybatis框架学习笔记

MyBatis关联关系

Mybatis关联关系

mybatis关联关系