我是靠谱客的博主 忧心大神,这篇文章主要介绍MyBatis MySQL limit分页含运算动态语句,现在分享给大家,希望可以做个参考。

MySQL基本的分页语句

select * from table limit offset,pageSize

正常情况下是没问题的,如果offset是动态的

select * from table limit (pageNum-1)*pageSize,pageSize

这样就无法执行了。
具体原因可以在MySQL中直接执行这种含运算符的语句试下就知道了。

现在给出两种解决方案

  1. 使用MySQL提供的方案(感觉上好像也不是MySQL给的,大家自己看吧)
    原始SQL
 select * from mysql01 limit (1-1)*5,5

方案:

SET @a=CONCAT('select * from mysql01 limit ',(1-1)*5,',',5,'');
PREPARE texts FROM @a;
EXECUTE texts;

简单的SQL在mybatis中直接按照上边替换就好。这里参考的解决在MYSQL中 limit语句无法识别运算的问题。

  1. 使用< bind />标签
<bind name="key_offset" value="(pageNum-1)*pageSize"></bind>
select * from table limit #{key_offset},#{pageSize}

项目中我的SQL稍微复杂点儿,用的第二种方式,建议大家也用第二种。

实际上如果不想这样做还是将offset的值计算好之后再传入比较好(因为我要兼容Oracle的接口,所以这样搞了)。

最后

以上就是忧心大神最近收集整理的关于MyBatis MySQL limit分页含运算动态语句的全部内容,更多相关MyBatis内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(114)

评论列表共有 0 条评论

立即
投稿
返回
顶部