MyBatis一对多或多对多分页查询的结果条数不符合预期的问题解决
问题描述
通常我们我们在单表查询中我们可以采用limit进行分页查询,这样可以减少页面的显示量,加快页面想应速度。但是在MyBatis框架中,如果我们在一对多或多对多查询中直接使用limit关键字的话会产生查询结果数量不够的情况。
我们先给出一个关系模型:
blog_tag(标签表)和blog_article(文章表)是多对多关系,article_tag是多对多关系中的联系表。
传统的分页查询
我们需要分页查询blog_article表,然后关联查询“文章的标签”表,执行SQL如下:
-- 只查询表中一小部分字段是为了演示方便,我们分页article表的8条数据
SELECT
a.id,
a.title,
t.tagname,
t.article_num
FROM
blog_article a
LEFT JOIN article_tag a_t ON a.id = a_t.article_id
LEFT JOIN blog_tag t ON a_t.tag_id = t.id
LIMIT 0,8
查询结果:
我们可以看到查询的结果中虽然有8条数据,但是不是我们想要的8条article
数据,如果上述结果被MyBatis封装只会得到4个BlogArticle
对象。这就开头提出的问题的产生原因。
解决方案
我们可以采用子查询分页
的方式来解决这个问题。
SELECT
a.id,
a.title,
t.tagname,
t.article_num
FROM
(select id,title from blog_article limit 0,8) a
LEFT JOIN article_tag a_t ON a.id = a_t.article_id
LEFT JOIN blog_tag t ON a_t.tag_id = t.id
执行结果:
通过上述方案,我们才能得到8条BlogArticle对象。
MyBatis一对多或多对多分页查询的结果条数不符合预期的问题解决的更多相关文章
- MyBatis 一对多,多对一关联查询的时候Mapper的顺序
要先写association,然后写collection:这是由DTD决定的: <resultMap ...> <association ...> </associati ...
- Mybatis一对多或多对多只能查出一条数据解决策略
原文:https://blog.csdn.net/ren814/article/details/81742242 <resultMap id="menuModelMap" t ...
- mybatis报错:查询一对多或多对多时只返回一条数据的问题
问题: 使用映射文件实现查询一对多或多对多时只返回一条数据问题 解决方法: 导致这种情况出现的问题是因为两个表中的主键是一样所以出现了数据覆盖问题. 解决方式一:修改数据库表中的主键(这种方法比较麻烦 ...
- SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份
SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...
- Mybatis一对多/多对多查询时只查出了一条数据
问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据. 三个表,权限表(Permission),权限组表(Permission ...
- springboot结合mybatis使用pageHelper插件进行分页查询
1.pom相关依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- Mybatis的ResultMap与limit分页查询
ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...
- mybatis一对多根据条件查询的查条数
一对多写了mapper映射之后 根据条件查条数 可以根据主表的唯一id进行分组 在拿到它的count select count(0) over(aa.id),,id,name,age from tab ...
- C# 返回分页查询的总页数
/// <summary> /// 返回分页查询操作的的总页数 /// </summary> /// <param name="count">总 ...
- 表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数
上一篇笔记将开始定义的存储结构处理了一下,将FormItems数组中的表单项都拿到mongodb document的最外层,和以前的关系型数据类似,之不过好多列都是动态的,不固定,不过这并没有什么影响 ...
随机推荐
- 怎么查看摄像头的硬件ID
1.打开设备管理器:电脑桌面左下角Windows图标点击鼠标右键,点击[设备管理器] 2.展开[照相机] 3.双击摄像头,弹出属性框 4.点击[详细信息],属性点击[硬件ID]
- 4天带你上手HarmonyOS ArkUI开发
本次HarmonyOS ArkUI入门训练营课程--健康生活实战篇,手把手教大家如何制作一个合理膳食的APP前端Demo! 课程实战样例通过ArkUI声明式UI开发框架实现,只需用几行简单直观的声明式 ...
- CentOS 6.5快速部署HTTP WEB服务器和FTP服务器
CentOS 6.5快速部署HTTP WEB服务器和FTP服务器 时间:2014-03-29 来源:服务器之家 投稿:root 点击:210次 [题记]本文使用CentOS 6.5m ...
- 重新点亮shell————特殊符号[五]
前言 简单整理一下特殊符号. 正文 特殊符号大全: 引号 ' 完成引用 "" 不完全引用 ` 执行命令 括号 () (()) $() 圆括号 单独使用圆括号会产生一个子shell ...
- redis 面试题整理
前言 前天面试了一家公司,平时看一本redis书的也使用redis,对里面的东西也基本了解,结果回答的时候居然回答了只是使用了(因为认为是redis是运维的东西,做的东西多,所以忘了,好吧这是借口), ...
- 用fpga实现1G Eth TCP&UDP硬件协议栈
用fpga实现的1G 以太网硬件协议栈,属于轻的协议栈
- llm构建数据标注助手
为什么要用LLM构建数据标注工具 在LLM出现之前,传统的深度学习模型(包括CV和NLP)就已经需要大量的数据进行训练和微调.没有足够的数据,或者数据需要进行二次加工(比如标签标注),这些问题都成为限 ...
- 编译 OpenCV 的 Python 依赖
这一次编译 OpenCV 的 Python 依赖为了方便运行我们使用 Docker 进行编译,环境准备如下: 系统依赖:Ubuntu 18.04 Python 版本:3.6,Ubuntu 18.04 ...
- 《Effective C#》系列之(四)——最小化内存泄露和资源占用
一.内存泄露 在<Effective C#>这本书中,最小化资源泄漏是其中一章的内容.以下是该章节的一些核心建议,以及使用C#代码示例说明: 及时释放非托管资源:在使用非托管资源时,需要手 ...
- resin报错:java.lang.IllegalStateException: block Block
java.lang.IllegalStateException: block Block 启动resin时报错 主要的提示信息就是下面这个 java.lang.IllegalStateExceptio ...