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对象。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听到微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值