zoukankan      html  css  js  c++  java
  • mybatis 一对多和多对一 简单案例笔记

    以案例说明(以下案例代码都敲过验证过)

    多对一(多个学生对一个老师  即学生集合中都存一个老师对象)

    Mybatis多对一实现方式1:

    //定义Student 和 Teacher 实体
    @Data
    public class Student {
        private int id;
        private String name;
        //tid对应teacher的id
        private int tid;
        private Teacher teacher;
    }
    
    @Data
    public class Teacher {
        private int id;
        private String name;
    }
    <mapper namespace="mapper.StudentMapper">
        <resultMap id="stuAboutTea" type="bean.Student">
            <result property="id" column="ic"></result>
            <result property="name" column="name"></result>
            //普通查询只需查询selectstudent就好了
            //多对一查询多了association标签  我认为这个标签作用就是嵌套查询
            //其中javaType是property中teacher对象的类 select嵌套查询的id
            <association property="teacher" column="tid" javaType="bean.Teacher" select="selectstubyid"/>
        </resultMap>
        
        <select id="selectstudent" resultMap="stuAboutTea">
            select * from student
        </select>
    
        <select id="selectstubyid" resultType="bean.Teacher">
            select * from teacher where id=#{id}
        </select>
    </mapper>              

    这种方式调selectid为selectstudent的sql  selectstudent中就嵌套了selectstubyid的查询  嵌套的结果集存在private Teacher teacher;

    Mybatis多对一实现方式2:

       <resultMap id="StudentTeacher2" type="bean.Student">
            <id property="id" column="sid"/>
            <result property="name" column="sname"/>
            <!--关联对象property 关联对象在Student实体类中的属性-->
            <association property="teacher" javaType="bean.Teacher">
                <result property="name" column="tname"/>
            </association>
        </resultMap>
    
        <select id="getStudents2" resultMap="StudentTeacher2" >
            select s.id sid, s.name sname , t.name tname
            from student s,teacher t
            where s.tid = t.id
        </select>

    这种方式是直接用sql将多对一的结果查询出来 需存到teacher对象中的参数映射在association标签中定义

    我个人认为第二种更好一点 因为遇到复杂的sql更直观

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    一对多(一个老师对一个学生  即teacher实体类中存了student集合对象)

    Mybatis一对多实现方式1:

    @Data
    public class Teacher {
        private int id;
        private String name;
        //一个老师多个学生
        private List<Student> students;
    }
    
    @Data
    public class Student {
        private int id;
        private String name;
        //tid对应teacher的id
        private int tid;
    }
      <resultMap id="TeacherStudent" type="bean.Teacher">
            <result  property="name" column="tname"/>
        //collection标签同上例类似 但它是存student集合的 collection就是集合很好记
            <collection property="students" ofType="bean.Student">
                <result property="id" column="sid" />
                <result property="name" column="sname" />
                <result property="tid" column="tid" />
            </collection>
        </resultMap>
    
        <select id="getTeacher" resultMap="TeacherStudent">
            select s.id sid, s.name sname , t.name tname, t.id tid
            from student s,teacher t
            where s.tid = t.id and t.id=#{id}
        </select>

    一对多例子同上类似 只不过将查询多对一中存单个对象变为存集合 标签collection就是集合 

  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/hbhb/p/14394529.html
Copyright © 2011-2022 走看看