问题描述

​ 通常我们我们在单表查询中我们可以采用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一对多或多对多分页查询的结果条数不符合预期的问题解决的更多相关文章

  1. MyBatis 一对多,多对一关联查询的时候Mapper的顺序

    要先写association,然后写collection:这是由DTD决定的: <resultMap ...> <association ...> </associati ...

  2. Mybatis一对多或多对多只能查出一条数据解决策略

    原文:https://blog.csdn.net/ren814/article/details/81742242 <resultMap id="menuModelMap" t ...

  3. mybatis报错:查询一对多或多对多时只返回一条数据的问题

    问题: 使用映射文件实现查询一对多或多对多时只返回一条数据问题 解决方法: 导致这种情况出现的问题是因为两个表中的主键是一样所以出现了数据覆盖问题. 解决方式一:修改数据库表中的主键(这种方法比较麻烦 ...

  4. SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份

    SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...

  5. Mybatis一对多/多对多查询时只查出了一条数据

    问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据. 三个表,权限表(Permission),权限组表(Permission ...

  6. springboot结合mybatis使用pageHelper插件进行分页查询

    1.pom相关依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...

  7. Mybatis的ResultMap与limit分页查询

    ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...

  8. mybatis一对多根据条件查询的查条数

    一对多写了mapper映射之后 根据条件查条数 可以根据主表的唯一id进行分组 在拿到它的count select count(0) over(aa.id),,id,name,age from tab ...

  9. C# 返回分页查询的总页数

    /// <summary> /// 返回分页查询操作的的总页数 /// </summary> /// <param name="count">总 ...

  10. 表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数

    上一篇笔记将开始定义的存储结构处理了一下,将FormItems数组中的表单项都拿到mongodb document的最外层,和以前的关系型数据类似,之不过好多列都是动态的,不固定,不过这并没有什么影响 ...

随机推荐

  1. Mysql之备份工具

    一.备份工具 1. mysqldump mysql服务自带的备份工具:mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适 ...

  2. CentOS下安装OpenSSH 5.8的三种方法【未测试】

    CentOS下安装OpenSSH 5.8的三种方法 Category : 工作学习 / Tags : centos, linux, openssh / Date : 2011.05.19 / 5,29 ...

  3. NodeJs初探索

    练习1:模块之间的引用 a.js // 引入b.js模块 var b = require("./b"); // 调用对象里的方法: 对象.属性名 对象.方法名() b.add(); ...

  4. 如何解决python安装mysqlclient失败问题

    在使用Django等框架来操作MySQL时,实际上底层还是通过Python来操作的,首先需要安装一个驱动程序,在Python3中,驱动程序有多种选择,比如有pymysql以及mysqlclient等. ...

  5. 《Effective C#》系列之(一)——异常处理与资源管理

    请注意,<Effective C#>中的异常处理与资源管理部分实际上是第四章的内容.以下是关于该章节的详细解释. 第四章:异常处理与资源管理 一. 了解异常处理机制 异常处理机制使程序员能 ...

  6. 07cj031,07CJ03-1图集免费下载

    简介 07CJ03-1轻钢龙骨石膏板隔墙.吊顶图集是中国建筑标准设计研究院组织编写的一部针对轻钢龙骨.石膏板材料用于非承重隔墙.室内吊顶装修的装修.建造参考资料,为用户提供专业的建造参考 下载 有需要 ...

  7. 浏览器端实现类似input限制输入两位小数,输入时光标从输入位置移动到最后

    1.问题描述展示 示例代码所做限制为不允许输入字母d,其他限制规则可以根据需求自己调整,使用React编写,其他框架或原生均可根据该代码理解原理进行转变,特意使用了中文键盘可以看到输入框下面白色框闪出 ...

  8. 硬之城携手阿里云 Serverless 应用引擎(SAE)打造低代码平台

    简介: 简化用云的成本,把复杂留给自己,简单留给用户. 作者 | 陈泽涛(硬之城产品总监)& 洛浩(阿里云云原生高级架构师) 硬之城成立于 2015 年,是一家以电子元器件 BOM 整体供应为 ...

  9. Nacos 开源、自研、商业化三位一体战略解读

    简介: Nacos作为整个阿里云原生三位战略中的核心组成部分,我们在2018年以Configserver/VIPServer/Diamond为基础通过Nacos开源输出阿里十年沉淀的注册中心和配置中心 ...

  10. [FE] uni-app 导航栏开发指南

    一种是 原生导航栏添加自定义按钮.简单明了. pages.json 配置 { "path": "pages/log/log", "style" ...