Mybatis 相同查询参数但返回结果不同(踩坑记录)

最近项目中遇到一个非常奇怪的问题,前端分页列表,传给后端相同的查询参数,但是返回结果不同,可能前几次能够正确的返回结果数据,但是下一次返回数据可能就为空。后端是通过Mybatis来进行SQL执行的,通过配置Mybatis打印执行SQL发现,能够返回结果的是我想要的查询SQL,结果如下:

    SELECT * FROM bss_follow_up_user_info m LIMIT 0,20;

生成的异常SQL,结果如下:

    SELECT count(0) FROM bss_follow_up_user_info m LIMIT 0 OFFSET 20;

通过分析结果,LIMIT 0 OFFSET 20和LIMIT 0,20这两种写法是完全相反的,OFFSET是跳过20条取0条数据,而LIMIT 0,20是不跳过取20条数据,因为我数据库中只有一条数据,所count(0)为0,所以它不会再继续执行真正的查询SQL。

解决办法:

    将XML中的 LIMIT #{page} , #{limit} 改为LIMIT #{limit} OFFSET #{page}

这样的话它解析出来查询数量的SQL就是如下结果:

    SELECT count(0) FROM bss_follow_up_user_info m LIMIT 20 OFFSET 0;

这样他就能够正常查询出数量,并继续执行真正的查询SQL。

到此问题解决。

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:博客之星2020 设计师:CSDN官方博客 返回首页

打赏作者

张志翔 ̮

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值