mybatis关联一对多查询时,FOUND_ROWS()方法输出错误

情况

上周五在敲代码的时候,发现一个列表的总数输出有问题,不是1就是0,根本不是我想要的数。

使用的是下面的这两个

SQL_CALC_FOUND_ROWS
FOUND_ROWS()

原因

我是将查询列和查询总数分为两个方法进行调用的,先进行列查询,然后再使用FOUND_ROWS()方法进行总数查询。

这就导致了,我没有连续执行包含“SQL_CALC_FOUND_ROWS”和FOUND_ROWS()这两个,中间相隔了若干个关联查询的sql。这两个的sql必须是连在一起的,中间不能有其他的sql,否则“FOUND_ROWS()”这个方法内的计数器会被其他sql的结果覆盖

经过测试,无论是否书写“SQL_CALC_FOUND_ROWS”关键字,对FOUND_ROWS()方法没有任何的影响。

解决方案

暂时我只想到两个解决方案

一、手动进行关联查询

将主查询和关联查询分开,在进行完主查询后,手动迭代查询关联查询。

二、使用关键字

在接收数据库返回数据的对象中,添加“总数”字段,在“resultMap”中添加collection。property随便添加,最好是id

局限:在使用时发现问题,在查询为关联查询时,会出现查询count的sql有时在关联查询后执行的情况。导致count值依旧出现问题的情况,暂时未找到更改mybatis的关联查询顺序的地方。

三、单次select中写两条sql

<!-- 用来记录分页查询时的所有数据量,避免出现分页查询时需要查询两次 -->
<resultMap type="java.lang.Integer" id="count">
    <result column="total"/>
</resultMap>
	
<!-- 多条件查询 /分页查询-->
<select id="selectPage" resultMap="自定义的resultMap,count">
    SELECT SQL_CALC_FOUND_ROWS 
        * 
    FROM  
        表名及条件;	
    <!-- 查询数据量 -->
    SELECT FOUND_ROWS(*) AS total;
</select>

返回值使用List<Object>来接收

List<Object> selectPage(@Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize);

 

待续:如果以后找到更优美的一sql获得关联查询分页+总数的方法,再更新

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值