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.

posted @ 2023-06-03 23:11  软柠柠吖  阅读(180)  评论(0编辑  收藏  举报