• MyBatis-10-多对一处理


    10、多对一处理

    多对一:

    • 多个学生,对应一个老师
    • 对于学生这边而言,关联...多个学生,关联一个老师【多对一】
    • 对于老师而言,集合,一个老师又很多学生【一对多】

    SQL:

    CREATE TABLE `teacher`(
    `id` int(10) Not null,
    `name` VARCHAR(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    
    INSERT INTO teacher(`id`,`name`) VALUES (1,'秦老师');
    
    CREATE TABLE `student`(
    `id` int(10) Not null,
    `name` VARCHAR(30) DEFAULT NULL,
    `tid` INT(10) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `fktid`(`tid`),
    CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    
    INSERT INTO student(`id`,`name`,`tid`) VALUES (1,'小明',1);
    INSERT INTO student(`id`,`name`,`tid`) VALUES (2,'小红',1);
    INSERT INTO student(`id`,`name`,`tid`) VALUES (3,'小张',1);
    INSERT INTO student(`id`,`name`,`tid`) VALUES (4,'小李',1);
    INSERT INTO student(`id`,`name`,`tid`) VALUES (5,'小王',1);
    

    测试环境

    1. 导入lombok
    2. 新建实体类Teacher,Student
    3. 新建Mapper接口
    4. 建立Mapper.XML文件
    5. 在核心配置文件中绑定注册我们的MApper接口或者文件!【方式很多,随意选】
    6. 测试查询是否成功!

    按照查询嵌套处理

    <!--
    思路:
        1、查询所有的学生信息
        2、根据查询出来的学生的id的tid,寻找对应的老师! -子查询
    
    -->
    
    <select id="getStudent" resultMap="StudentTeacher">
    select * from student
    </select>
    
    <resultMap id="StudentTeacher" type="com.rui.pojo.Student">
        <!--复杂的属性,我们需要单独处理  对象:association  集合:collection-->
        <association property="teacher" column="tid" javaType="com.rui.pojo.Teacher" select="getTeacher"/>
    </resultMap>
    
    <select id="getTeacher" resultType="com.rui.pojo.Teacher">
        select * from teacher where id = #{id}
    </select>
    

    按照结果嵌套处理

    <!--按照结果嵌套处理-->
    <select id="getStudent2" resultMap="StudentTeacher2">
        select s.id sid,s.name sname,t.name tname,t.id tid
        from student s,teacher t
        where s.tid=t.id;
    </select>
    
    <resultMap id="StudentTeacher2" type="com.rui.pojo.Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="teacher" javaType="com.rui.pojo.Teacher">
            <result property="id" column="tid"></result>
            <result property="name" column="tname"></result>
        </association>
    
    </resultMap>
    

    回顾Mysql多对一查询方式:

    • 子查询
    • 联表查询
    Keep Clam and Carry Keen.
  • 相关阅读:
    lvs实现故障转移(backup)
    shell计算
    CEGUI 聊天对话框
    SetRenderState 设置渲染状态【转】
    MFC 弹出对话框
    DrawIndexedPrimitive函数的详细解释【转】
    IDirect3DDevice9::Clear 【转】
    manifest 文件错误
    D3DXMatrixLookAtLH 【转】
    D3D中的网格(Mesh)
  • 原文地址:https://www.cnblogs.com/MrKeen/p/12012102.html
Copyright © 2020-2023  润新知