MyBatis嵌套查询和嵌套结果区别以及一对一、一对多、多对多的映射实现

如题所述

嵌套查询与嵌套结果在MyBatis中的区别主要体现在执行数据库查询的次数上。嵌套查询是针对关联的嵌套查询,会得到一个结果集,然后根据每条记录执行关联查询。这意味着,如果查询结果集返回N条记录,关联查询将会执行N次,再加上自身返回结果集查询1次,总共需要访问数据库N+1次。这种情况下,如果N的值较大,数据库访问的消耗将会非常显著,从而可能影响性能。

相比之下,嵌套结果则是MyBatis处理一对多、多对多以及多对一查询的方式。它通过联合查询,一次性从数据库中获取所有结果,然后根据一对一、一对多、多对多的关系,结合ResultMap中的配置,对结果进行转换。

在实现一对一、一对多、多对多的映射时,有以下规则:

● 一对一:在任意一方引入对方主键作为外键;

● 一对多:在“多”的一方,添加“一”的一方的主键作为外键;

● 多对多:通过生成中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。

在映射过程中,使用property指定映射到的实体类对象属性,与表字段一一对应;使用column指定表中对应的字段。

个人学习记录一下下!!
温馨提示:内容为网友见解,仅供参考
无其他回答

MyBatis嵌套查询和嵌套结果区别以及一对一、一对多、多对多的映射实现...
● 一对一:在任意一方引入对方主键作为外键;● 一对多:在“多”的一方,添加“一”的一方的主键作为外键;● 多对多:通过生成中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。在映射过程中,使用property指定映射到的实体类对象属性,与表字段一一对应;使用column...

mybatis的嵌套查询与嵌套结果
一对多的嵌套查询通过关联查询实现,将结果集返回并进行多次关联查询。嵌套查询一对一则在结果集中仅关联一次。然而,嵌套查询存在N+1问题,即关联查询执行次数等于结果集的条数加一。如果结果集较大,这将导致大量的数据库访问,消耗性能。为了解决N+1问题,Mybatis引入了嵌套结果查询。它通过联合查询,将...

Mybatis面试题(总结最全面的面试题!!!)
MyBatis实现一对多关系通常采用两种方式:嵌套查询和嵌套结果。嵌套查询使用子查询实现,嵌套结果则将多对一关系映射为单个实体。MyBatis支持延迟加载,通过配置延迟加载属性实现。其原理是将对象加载延迟到实际使用时,从而减少初始加载的开销。Mybatis的一级缓存和二级缓存分别针对会话(Session)和全局范围内缓...

Mybatis面试题总结及答案
Mybatis通过映射标签将查询结果映射到对象,支持多种映射形式。一对一和一对多关联查询需要手动编写SQL,可通过联合查询或嵌套查询实现。它支持延迟加载,通过CGLIB创建代理对象在需要时动态查询。Mybatis的缓存机制包括一级缓存(Session级)和二级缓存(Mapper级),可配置启用。接口绑定提供了灵活性,通过注解...

27 道经典 MyBatis 面试题
Mybatis被称为半自动ORM映射工具,与全自动ORM工具如Hibernate的区别在于手动编写SQL。一对一关联查询使用association节点配置,一对多关联查询使用collection节点配置。Mybatis实现一对多关联查询通过联合查询和嵌套查询,联合查询一次查询多个表,嵌套查询先查询主表,再根据外键关联查询子表。Mybatis支持延迟加载,...

【Mybatis】collection一对多查询子查询集合不为空,但属性值为空_百度...
在以上关联查询成功的基础上,想用嵌套查询实现同样的效果时,遇到了子查询结果返回的productsList始终是有结果集的,但每一个属性值都为空。第二种配置如下:排查过程:1.首先productsList的条数符合预期,只是每一条的属性都为空,所以判断子查询的参数传值没有问题,且取到了正确的结果,问题应该是出...

Mybatis Ibatis 嵌套查询XML配置怎么理解
1.右键单击桌面上的“我的电脑”,找到“设备管理器”并单击打开。2.在设备管理器菜单中找到“网络适配器”,并点击前面的三角,这时出现了的就是网卡驱动。右键单击网卡驱动,选择“更新驱动程序软件”。3.出现了两个选项,选择手动查找驱动程序并且安装,下一步选择刚才下载的驱动程序安装。4.安装完成...

Mybatis查询结果为空时,为什么返回值为NULL或空集合?
而多行数据的查询,如selectList,即使查询结果为空,也会返回一个空的List,而非null。这种差异与Mybatis的配置有关,特别是returnInstanceForEmptyRow属性。如果该属性开启,当查询所有列都为空时,Mybatis会返回一个空的对象实例,而非null。对于嵌套的结果集,如集合或关联对象,此特性同样适用。总的...

mybatis中mapper.xml里要进行嵌套查询,应该怎么做?
1.写一个普通查询语句 SELECT t1.userId,t1.userName from user 2.嵌套 <dynamic prepend="and"> <include refid="byDeptIdCondition"\/> where 1=1\/\/其他sql语句 注意命名空间 <\/dynamic>

Mybatis resultMap 嵌套集合
1、嵌套结果 对应的 resultMap 查询语句 2、关联的嵌套查询(在collection中添加select属性)商品结果集映射 resultMap collection 的 select 会执行下面的查询属性语句:属性结果集映射 BasePlusResultMap 包含了属性查询语句的 Collection 所以通过下面的查询商品语句就可获得商品以及其包含的属性集合:

相似回答
大家正在搜