加载中...

Mybatis的三种方式秒杀多对一的映射关系

处理多对一的映射关系

1、使用级联 处理多对一的映射关系

  <resultMap id="StResultMap" type="St">
      <id column="st_id" property="stId"></id>
      <result column="st_name" property="stName"></result>
      <result column="age" property="age"></result>
      <result column="gender" property="gender"></result>
      <!--确认好级联属性在数据库中的字段名字(column),以及在Java实体类中对应的字段的名字(property)-->
      <result column="class_id" property="class.classId"></result>
      <result column="class_name" property="class.className"></result>
  </resultMap>
  <select id="getStAndClassByStId" resultMap="StResultMap">
      SELECT
          t_st.st_id,
          t_st.st_name,
          t_st.age,
          t_st.gender,
          t_class.class_id,
          t_class.class_name
      FROM
          t_st
              LEFT JOIN t_class ON t_st.class_id = t_class.class_id
      where t_st.st_id = #{stId}
  </select>

2、使用association标签 处理多对一的映射关系

 <resultMap id="StResultMapA" type="St">
        <id column="st_id" property="stId"></id>
        <result column="st_name" property="stName"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
        <!--专门处理多对一的映射关系association,(处理实体类类型的属性)
        1、property:设置需要处理映射关系的属性的属性名 :class
        2、javaType:设置要处理的属性的类型 : Class
        -->
        <association property="class" javaType="Class">
            <id column="class_id" property="classId"></id>
            <result column="class_name" property="className"></result>
        </association>
    </resultMap>
<select id="getStAndClassByStId" resultMap="StResultMapA">
        SELECT
            t_st.st_id,
            t_st.st_name,
            t_st.age,
            t_st.gender,
            t_class.class_id,
            t_class.class_name
        FROM
            t_st
                LEFT JOIN t_class ON t_st.class_id = t_class.class_id
        where t_st.st_id = #{stId}
    </select>

3、使用分步查询 处理多对一的映射关系

① 学生查询的接口类
public interface StMapper {

    //查询员工以及所对应的部门信息,通过分步查询
    St getStAndClassByStepOne(@Param("stId")Integer stId);

}

② 查询的xml文件,采用分步查询
<resultMap id="getStAndClassByStepOne" type="St">
        <id column="st_id" property="stId"></id>
        <result column="st_name" property="stName"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
        <!--
        property:设置需要处理映射关系的属性的属性名
        select:设置分步查询的sql的唯一标识
        column:将查询出来的某个字段作置分步查询的sql的条件  
        -->
        <association property="class"
                     select="com.xmut.mybatis.mapper.ClassMapper.getStAndClassByStepTwo"
                     column="class_id"></association>
    </resultMap>
    <select id="getStAndClassByStepOne" resultMap="getStAndClassByStepOne">
        select * from t_st where st_id = #{stId};
    </select>
③班级查询接口
public interface ClassMapper {

    //分步查询第二步
    Class getStAndClassByStepTwo(@Param("stId")Integer stId);

}
④班级查询的xml文件
<select id="getStAndClassByStepTwo" resultType="Class">
        select * from t_class where class_id = #{classId}
</select>

OK!就这么多,睡大觉!!!

posted @ 2022-08-23 20:37  以后只能做  阅读(70)  评论(1)    收藏  举报