当前位置: 首页 > news >正文

mybatis05:复杂查询:(多对一,一对多)

mybatis05:复杂查询:(多对一,一对多)


文章目录

  • mybatis05:复杂查询:(多对一,一对多)
  • 前言:
    • 多对一 : 关联 : 使用association
    • 一对多 : 集合: 使用collection
    • sql语句分析:
  • 一、多对一:student 对 teacher
    • 1.按照查询嵌套处理:与子查询很相似
    • 2.按照结果嵌套处理(推荐自己使用)
  • 二、一对多:teacher对student
    • 1. 写sql难,但写resultMap简单。(推荐自己使用)
    • 2. 写sql简单,但写resultMap难。
  • 总结


前言:


多对一 : 关联 : 使用association

在这里插入图片描述



一对多 : 集合: 使用collection

在这里插入图片描述



sql语句分析:

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述


提示:以下是本篇文章正文内容:

一、多对一:student 对 teacher

1.按照查询嵌套处理:与子查询很相似


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

1.select标签,将resultType修改为resultMap,那么我们就需要写一个resultMap标签来映射(ORM)
2.多的一方 与 一的一方,student 与 teacher的关系是“关联”(association),这里是复杂查询的部分了,我们运用子查询的思想,根据tid来再去查询teacher对象。



2.按照结果嵌套处理(推荐自己使用)

    <!-- 思路:1.我们正常写sql语句(联表查询),2.但是对结果集映射里面的teacher对象,他的属性“再映射一次” --><select id="getStudent2" resultMap="StudentTeacher2">select s.id sid,s.name sname,t.name tnamefrom student s ,teacher twhere s.tid = t.id;</select><resultMap id="StudentTeacher2" type="com.zhu.pojo.Student"><result property="id" column="sid"/><result property="name" column="sname"/><association property="teacher" javaType="com.zhu.pojo.Teacher"><result property="name" column="tname"/></association></resultMap>

1.resultType修改为resultMap
2.我们对查询结果中的类,在映射一遍



二、一对多:teacher对student

1. 写sql难,但写resultMap简单。(推荐自己使用)


<!--  按结果嵌套查询-->
<select id="getTeacher" resultType="com.zhu.pojo.Teacher">select * from teacher;
</select>
<select id="GetTeacher" resultMap="GetStudent">select s.id sid ,s.name sname ,t.name tname,t.id tidfrom student s,teacher twhere s.tid = t.id and t.id=#{tid}
</select>
<resultMap id="GetStudent" type="com.zhu.pojo.Teacher"><result property="id" column="tid"/><result property="name" column="tname"/>
<!--
javaType="" 指定的属性的类型
集合中的泛型信息用 ofType 获取
--><collection property="students" ofType="com.zhu.pojo.Student"><result property="id" column="sid"/><result property="name" column="sname"/><result property="tid" column="tid"/></collection>
</resultMap>


2. 写sql简单,但写resultMap难。

<!--先查询老师,再查学生-->
<select id="GetTeacher2" resultMap="GetStudent2">select *from teacher where id=#{tid}
</select>
<resultMap id="GetStudent2" type="com.zhu.pojo.Teacher"><collection property="students"  javaType="ArrayList" ofType="com.zhu.pojo.Student" select="GetStudentByTeacherId" column="id"/>
</resultMap>
<select id="GetStudentByTeacherId" resultType="com.zhu.pojo.Student">select *from student where tid = #{tid}
</select>

总结

提示:这里对文章进行总结:

💕💕💕

重点:推荐使用 写sql难一点,但写resultMap简单一点的方法

(完完整整将语句语句给写完!!!)

http://www.lryc.cn/news/337250.html

相关文章:

  • 微电网优化:基于肝癌算法(Liver Cancer algorithm, LCA)的微电网优化(提供MATLAB代码)
  • VUE_H5页面跳转第三方地图导航,兼容微信浏览器
  • 智慧安全运营:智能化运维,确保服务无忧
  • R-tree总结
  • Python 与机器学习,在服务器使用过程中,常用的 Linux 命令包括哪些?
  • js通过Object.defineProperty实现数据响应式
  • docker最简单教程(使用dockerfile构建环境)
  • Vue2 —— 学习(三)
  • Qt Creator 12.0.2 debug 无法查看变量的值 Expression too Complex
  • LeetCode-Java:303、304区域检索(前缀和)
  • 出海业务的网络安全挑战
  • 蓝桥杯考前准备— — c/c++
  • 【MATLAB源码-第4期】基于MATLAB的1024QAM误码率曲线,以及星座图展示。
  • 数据结构-----枚举、泛型进阶(通配符?)
  • 线上问题监控 Sentry 接入全过程
  • 【数据库(MySQL)基础】以MySQL为例的数据库基础
  • 权限修饰符,代码块,抽象类,接口.Java
  • CSS设置文本
  • 【svg】—— java提取svg中的颜色
  • 论文分享 | FAST'23 阿里云提出的针对SMR优化的存储引擎SMRSTORE
  • 题目:建造房屋 (蓝桥OJ3362)
  • 智能合约平台开发指南
  • 数学建模-最优包衣厚度终点判别法(主成分分析)
  • Mysql内存表及使用场景(12/16)
  • Django交易商场
  • 华为校园公开课走入上海交大,鸿蒙成为专业核心课程
  • 【会员单位】泰州玉安环境工程有限公司
  • Google视觉机器人超级汇总:从RT、RT-2到AutoRT/SARA-RT/RT-Trajectory、RT-H
  • LeetCode-1143. 最长公共子序列【字符串 动态规划】
  • 从0开始创建单链表