MyBatis的关联查询

关联映射的一对多

  //查询经理角色   以及  该角色下对应的员工集合
    public SmbmsRole getRoleAndUser(Integer id);



 <resultMap id="roleAndUserMapper" type="SmbmsRole">
        <id column="rid" property="rid"></id>
        <result column="roleName" property="roleName"/>
        <!--映射多的一方 property代表实体当中多的一方的属性名      ofType代表集合当中泛型类型-->
        <!-- select 代表执行查询的ID   column所引用的条件列   -->
        <collection property="userList" ofType="SmbmsUser" select="getRoleAndUserMutilSQL" column="rid">

        </collection>
    </resultMap>




    <!--<select id="getRoleAndUser" resultMap="roleAndUserMapper">
        select u.id,u.userName,u.userRole,r.rid,r.roleName from smbms_user as u,smbms_role as r where u.userRole=r.rid and r.rid=#{id}
    </select>-->

    <select id="getRoleAndUser" resultMap="roleAndUserMapper">
        select * from  smbms_role where rid=#{id}
    </select>
    <select id="getRoleAndUserMutilSQL" resultType="SmbmsUser">
        select * from  smbms_user where userRole=#{rid}
    </select>

关联查询的多对一

//查询所有用户信息  包含角色信息
public List<SmbmsUser> getUserList();


<resultMap id="userListAndRole" type="SmbmsUser">
        <id column="id" property="id"></id>
        <result column="userName" property="userName"/>
        <association property="role" javaType="SmbmsRole" select="getRole" column="userRole">
            <id column="rid" property="rid"></id>
            <result column="roleName" property="roleName"/>
        </association>
    </resultMap>
    <!--<select id="getUserList" resultMap="userListAndRole">
        select u.id,u.userName,u.userRole,r.rid,r.roleName from smbms_user as u,smbms_role as r where u.userRole=r.rid
    </select>-->


    <select id="getUserList" resultMap="userListAndRole">
        select * from smbms_user
    </select>
    <select id="getRole" resultType="SmbmsRole">
        select * from smbms_role where rid=#{userRole}
    </select>

关联查询的多对多

//查询所有学生信息  以及授课教员
public List<Student> getStudentInfo();



<resultMap id="studentAndTeacherMapper" type="Student">
        <id column="stuid" property="stuid"/>
        <result column="stuname" property="stuname"/>
        <collection property="teachers" ofType="Teacher">
            <id column="tid" property="tid"></id>
            <result property="tname" column="tname"/>
        </collection>
    </resultMap>
    <select id="getStudentInfo" resultMap="studentAndTeacherMapper">
        select * from student,teacher,stu_t where student.stuid=stu_t.stuid and teacher.tid=stu_t.tid
    </select>

关联映射的自查询

 //查询河南省  下的所有子集
public City getCityAndChildCitys(Integer cid);


 <resultMap id="CityAndChildCitysMapper" type="City">
        <id column="cid" property="cid"></id>
        <result column="cname" property="cname"/>
        <result column="pid" property="pid"/>
        <collection property="childCitys" ofType="City" select="getCityAndChildCitysMutilSQL" column="cid">
            <id column="cid" property="cid"></id>
            <result column="cname" property="cname"/>
            <result column="pid" property="pid"/>
        </collection>
    </resultMap>

   <select id="getCityAndChildCitys" resultMap="CityAndChildCitysMapper">
       select * from city where cid=#{cid}
   </select>
    <select id="getCityAndChildCitysMutilSQL" resultMap="CityAndChildCitysMapper">
       select * from city where pid=#{cid}
   </select>
原文地址:https://www.cnblogs.com/dabrk/p/11661788.html