zoukankan      html  css  js  c++  java
  • mybatis中的ResultMap关联映射

    ResultMap 关联映射

    使用ResultMap来进行关联查询,是利用主键表和外键表的关系来处理的,它相比前面的少写了一条sql语句,效率相对较高;

    通过表连接查询将所需要的数据一并查询出来,然后再通过ResultMap将结果集映射到对应的对象中;单个对象==>association,集合==>collection;

    1)写sql 查询需要的数据

    2)配置ResultMap

    ①查询学生和班级信息,并通过ResultMap映射到单个Student类中;

    //查询学生和班级信息,并通过resultMap映射到单个Student类中
        Student2 selectWithClassMapping(Integer id);
        <resultMap id="commonResultMap" type="Student2">
            <id column="id" property="id"></id>
            <result property="studentName" column="name"></result>
            <result property="classid" column="classid"></result>
            <result property="version" column="version"></result>
        </resultMap>
        <resultMap id="studentClassMapping" type="Student2" extends="commonResultMap">
            <association property="hClass" javaType="HClass">
                <id column="classid" property="id"></id>
                <result column="classname" property="name"></result>
                <result column="city" property="city"></result>
            </association>
        </resultMap>
        <select id="selectWithClassMapping" resultMap="studentClassMapping">
            select t1.*,t2.name classname,t2.city from h_student t1,h_class t2
            where t1.classid=t2.id and t1.id=#{id}
        </select>

    测试文件为:

     System.out.println("=============测试查询学生和班级信息,并通过resultMap映射到单个Student类中======================");
            Student2 student24 = mapper.selectWithClassMapping(2);
            System.out.println(student24);
            System.out.println(student24.gethClass());

    ②查询学生和学生详细信息,并通过ResultMap映射到单个StudentInfo类中;

    //查询学生和学生详细信息,并通过resultMap映射到单个类中
        Student2 selectWithStudentInfoMapping(Integer id);
        <resultMap id="StudentInfoMapping" type="Student2">
            <id property="id" column="id"></id>
            <result property="studentName" column="name"></result>
            <result property="classid" column="classid"></result>
            <result property="version" column="version"></result>
            <association property="studentInFo" javaType="StudentInFo">
                <result property="age" column="age"></result>
                <result property="address" column="address"></result>
            </association>
        </resultMap>
        <select id="selectWithStudentInfoMapping" resultMap="StudentInfoMapping">
            select t1.*,t2.age,t2.address from h_student t1,h_student_info t2
            where t1.id=t2.id and t1.id=#{id}
        </select>

    测试文件为:

    System.out.println("==============测试学生和学生详细信息的映射=================");
            Student2 student2 = mapper.selectWithStudentInfoMapping(2);
            System.out.println(student2);
            System.out.println(student2.getStudentInFo());

    查询班级和学生信息,并通过ResultMap映射到Student类中;

     //通过结果resultMap映射,复杂结果集
        HClass selectWithStudentMapping(Integer id);
    <!--    复杂结果集映射-->
        <resultMap id="classStudentMapping" type="HClass">
            <id column="id" property="id"></id>
            <result property="name" column="name"></result>
            <result property="city" column="city"></result>
            <collection property="student2s" ofType="Student2">
                <id column="studentid" property="id"></id>
                <result column="studentname" property="studentName"></result>
                <result column="id" property="classid"></result>
                <result column="version" property="version"></result>
            </collection>
        </resultMap>
        <select id="selectWithStudentMapping" resultMap="classStudentMapping">
            select t1.*,t2.id studentid,t2.name studentname,t2.version
            from h_class t1,h_student t2 where t1.id=t2.classid and t1.id=#{id}
        </select>

    测试文件为:

     System.out.println("============测试resultMap==========");
            HClass hClass2 = mapper.selectWithStudentMapping(21);
            System.out.println(hClass2);
            System.out.println(hClass2.getStudent2s());

    ④通过班级查找老师,利用map映射;

    //班级查找老师,通过map映射
        HClass seletcHClassWithTeacher(Integer id);
        <resultMap id="HClassWithTeacherMapping" type="HClass">
            <id column="id" property="id"></id>
            <result property="name" column="name"></result>
            <result property="city" column="city"></result>
            <collection property="teachers" ofType="Teacher">
                <id column="teacherids" property="id"></id>
                <result column="teachername" property="name"></result>
                <result column="age" property="age"></result>
            </collection>
        </resultMap>
        <select id="seletcHClassWithTeacher" resultMap="HClassWithTeacherMapping">
            select t1.*,t2.id teacherids,t2.name teachername,t2.age
            from h_class t1,h_teacher t2,h_class_teacher t3
            where t1.id=t3.classid and t2.id=t3.teacherid and t1.id=#{id}
        </select>

    测试文件为:

    System.out.println("========测试班级和老师之间的映射关系==============");
            HClass hClass3 = mapper.seletcHClassWithTeacher(21);
            System.out.println(hClass3);
            System.out.println(hClass3.getTeachers());
  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/xie-qi/p/12919855.html
Copyright © 2011-2022 走看看