文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【解决】Mybatis-plus分页插件一对多分页查询问题

2023-09-23 13:36

关注

项目场景:

一对多分页查询,查询主表的同时将子表数据查出


问题描述

Mybatis-plus分页插件多表连查寻时数量不对
总条数有8条
实际只查询出了7条
结果丢失了一条数据,并且还会导致主数据里的子数据丢失
– (假如A的某1条数据有B的3条子数据,则可能只会查出1条或者2条)

查询结果

原因分析:

一对一的情况下不会出现一下数据丢失问题

比如图中,我们通过 resultMap 中的 collection 标签指定一对多子类数据的映射

请添加图片描述

在sql中查询结果如下:
A:为作业表 B:为中间表(不做演示) C:为学生表
我们可以看到,查询出了重复数据(3条历史作业,2条生物作业)
这是因为历史作业(A表)下有3位学生(B表),抛开重复数据,只查询出了7条数据
​假如体育作业在第11条,则会因为设置的分页数量为10,导致体育作业被抛弃了~
Mybatis-plus通过直接映射,数据数量不对,8条数据只查询出来7条数据。

请添加图片描述

总结:
其实A表一共才8条数据,是可以全部查询出来的,因为被重复数据占用了,导致数据丢失。


解决方案:

将子表的数据单独查询

请添加图片描述

①:因为中间表(B表)字段没有在映射的实体中,则需要在映射的实体中添加对应字段,如下图
②:映射实体中子表数据集合的名称
③:关联的字段,就是子表查询时需要的字段
④:子表查询语句 select 标签的id名称
⑤:主表查询传入的参数,也就是 ③ 的值

请添加图片描述
注意:

​ 1、主表中将中间表需要关联子表的字段查询出来并取别名对应映射实体添加的字段 如图 ①处
​ 2、删除 collection 下子表的映射字段,通过分开的sql来映射
​ 3、这种写法你的请求条件参数无法传递到子表查询的sql语句中,子表sql的条件参数只能是主表column属性的字段

来源地址:https://blog.csdn.net/SmallCat0912/article/details/128240410

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯