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就是集合 

  • 相关阅读:
    (转)Scrapy 深入一点点
    解决Scrapy shell启动出现UnicodeEncodeError问题
    js回调方法
    UGUI 之 控件以及按钮的监听事件系统 存档
    重力感应示例
    网格概念
    Flash Player11异步解码Bitmap
    打包包含已修改过的bug
    ios7官方推荐icon尺寸
    项目资源通过swc获取
  • 原文地址:https://www.cnblogs.com/hbhb/p/14394529.html
Copyright © 2011-2022 走看看