mybatis学习15:复杂查询环境搭建&多对一处理

mybatis学习15:复杂查询环境搭建

  • 多对一处理:

    • 流程图:

       

    • 多个学生对应一个老师;

    • 对于学生而言,就是多对一,所以学生和老师的关系是:关联关系(多个学生关联一个老师)

    • 对于老师而言,就是一对多,所以老师和学生的关系是:集合关系(一个老师下面有很多学生)

 

  • 关联:association

    • association :一个复杂类型的关联;

    • 许多结果将包装成这种类型;

 

  • 集合:collection

    • collection – 一个复杂类型的集合;

 

  • 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');

 

 

  • 测试环境搭建:

    • 导入lombok

    • 新建实体类Teacher,Student

    • 建立Mapper接口

    • 建立Mapper.xml

    • 把Mapper.xml注册到Mybatis核心配置文件中;

    • 测试是否成功!

 



 

  • 多对一的处理:

    • 按照查询嵌套处理:类似于子查询

      <!--
       思路:
       1,查询所有的学生信息;
       2,根据查询出来的学生tid寻找对应的老师;
      -->
      <resultMap id="studentTeacher" type="student">
         <result property="id" column="id"/>
         <result property="name" column="name"/>
         <!--复杂的属性,我们需要单独处理
             对象:association
             集合:collection
         -->
         <association property="teacher" column="tid" javaType="teacher"       select="getTeacher"/>
      </resultMap>

      <select id="getStudent" resultMap="studentTeacher">
        select * from student
      </select>

      <select id="getTeacher" resultType="teacher">
        select * from teacher where id=#{tid}
      </select>
    • 按照结果嵌套处理:多表联查

      <!--按照结果嵌套处理-->
      <resultMap id="studentTeacher2" type="student">
         <result property="id" column="sid"/>
         <result property="name" column="sname"/>
         <association property="teacher" javaType="teacher">
             <result property="name" column="tname"/>
         </association>
      </resultMap>

      <select id="getStudent2" resultMap="studentTeacher2">
        select a.id as sid ,a.name as sname,b.name as tname from student a , teacher b where a.tid=b.id
      </select>

       

  • 回顾Mysql多对一查询方式:

    • 子查询

    • 联表查询 

 

 

 

 

 

posted @   gzs1024  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示