首页 > 其他分享 >mybatis 多表关联查询

mybatis 多表关联查询

时间:2023-06-03 23:23:39浏览次数:47  
标签:多表 映射 cid 关联 mybatis 查询 属性

MyBatis 多表关联查询

一对多查询

一对多关联查询是指,在查询一方对象的时候,同时将其所关联的多方对象也都查询出来。

image-20230419135656288.

Ⅰ、多表连接(联合)查询

这种方式只用到 1SQL 语句。

image-20230419142949056.

注意:

  1. 即使字段名与属性名相同,在 <resultMap> </resultMap> 中也要写出它们的映射关系。因为框架是依据这个 <resultMap> </resultMap> 封装对象的。

  2. 在 "一方" 的映射文件中使用 <collection> </collection> 标签体现出两个实体对象间的关联关系。

collection 两个属性的解释如下:

  • property:指定关联属性,即 Class 类中的集合属性 studentList

  • ofType:集合属性的泛型类型,即 com.rnny.entity.Student


Ⅱ、多表单独查询

多表连接查询方式是将多张表进行连接,连为一张表后进行查询。其查询的本质是一张表。

而多表单独查询方式是多张表各自查询各自的相关内容,需要多张表的联合数据,再将主表的查询结果联合其它表的查询结果,封装为一个对象。

多个查询是可以跨越多个映射文件的,即是可以跨越多个 namespace 的。在使用其它 namespace 的查询时,添加上其所在的 namespace 即可。这种方式要用到 2SQL 语句。

代码如下所示:

image-20230420104939283.

  1. 先执行 findClassesById 查询主表 classes,查询出各个列的值,包括 cid

  2. 查主表出来的各个列值传递给 <resultMap id="classesResultMap" > 进行结果映射。其中cid 的值还要传给 <collection> 节点作为实参。

  3. 执行 selectStudentsByClasses 查询,以 cid 做为实参,查询出结果,结果封装为 <resultMap id="studentResultMap">



多对一关联查询

多对一关联查询是指在查询多方对象的时候,同时将其所关联的一方对象也查询出来。

由于在查询多方对象时也是一个一个查询,所以多对一关联查询,其实就是一对一关联查询。即一对一关联查询的实现方式与多对一的实现方式是相同的。 配置多对一关联的重点在于 "多方" 的映射文件要有 <association> </association> 属性关联 "一方"。

Ⅰ、多表联合(连接)查询

image-20230420105437125.


Ⅱ、多表单独查询

image-20230420110747131.

  1. <select id="searchStudentsById"> 中查询出来的 classno 传递给 <association> 中的 column="classno"

  2. 再把 classno 的值做为实参,传递给 <select id="findClassesById"> 中的形参 #{cid}



自连接

多对一的方式实现自连接

思路分析:将员工当作多方,上司当用一方。

image-20230425222900278.

Employee 里面的一个属性 leader, 本身就是 Employee 类型。

单独查询

image-20230425223915518.

标签:多表,映射,cid,关联,mybatis,查询,属性
From: https://www.cnblogs.com/rnny/p/17454982.html

相关文章

  • 多表数据重组(Power Query)
    问题:多个如下图结构的表数据重组效果如下: 数据整理:let源=Excel.Workbook(File.Contents("路径\文件名.xlsx"),null,true),筛选掉无关工作表=Table.SelectRows(源,eachText.Contains([Name],"0")),筛选掉非工作表=Table.SelectRows(筛选掉无关工......
  • Map 接收 @RequestBody,Controller 层可以打印值,但是 mybatis 编译 SQL 语句显示 NULL
    mybatis#{}获取的key是否一致;前端发送请求类型是否与后端接口定义的请求类型一致;前端发送请求与接口请求的类型一致的情况下,检查post请求封装data时是否以get形式传递数据。我的问题是第三个,尤其是后端不报任何错误的情况下,第三种情况极有可能。我把axios.post......
  • 每日记录(数据查询语法(DQL)(1))
    DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。语法:SELECTselection_list/*要查询的列名称*/ FROMtable_list/*要查询的表名称*/ WHEREcondition/*行条件*/ GROUPBYgrouping_columns/*对结果分组*/ HAVINGcond......
  • 每日记录(数据查询语法(DQL)(2))
    1基础查询1.1查询所有列SELECT*FROM stu;1.2查询指定列SELECTsid,sname,ageFROMstu;2条件查询2.1条件查询介绍条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:l=、!=、<>、<、<=、>、>=;lBETWEEN…AND;lIN(set);lISNULL;lA......
  • 每日记录(数据查询语法(DQL)(3))
     模糊查询当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。3.1查询姓名由5个字母构成的学生记录SELECT*FROMstuWHEREsnameLIKE'_____';模糊查询必须使用LIKE关键字。其中“_”匹配任意一个字母,5个“_”表示5个任意字母。3.2查......
  • excel跨表查询
     ......
  • mybatis批量更新和踩坑总结
    1.mybatis批量更新示例:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.cars.ic......
  • MybatisPlus02_IService和各种插件
    前言上次忘了把application.yml放出来,以至于没有配置日志,log-impl后面的值表示输出日志到控制台。mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:id-type:automapper-locations:c......
  • 大件货运系统源码,技术架构:spring boot、mybatis、redis、vue、element-ui
    网络货运平台源码网络货运平台的功能网络货运是指利用互联网平台,通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合,通过网络平台进行交易、物流配送和结算等一系列流程,从而实现货物的快速、高效、便捷地运输。技术架构:spr......
  • Oracle 死锁与慢查询总结
    查看死锁SELECTs.sid"会话ID",s.lockwait"等待锁",s.event"等待的资源/事件",--最近等待或正在等待的资源/事件DECODE(lo.locked_mode,0,'尚未获得锁',1,NULL,2,'行共享锁',3,'行排它锁',4,'共享表锁',5,'共享行排它锁',6,......