MySQL基本的分页语句
select * from table limit offset,pageSize
正常情况下是没问题的,如果offset是动态的
select * from table limit (pageNum-1)*pageSize,pageSize
这样就无法执行了。
具体原因可以在MySQL中直接执行这种含运算符的语句试下就知道了。
现在给出两种解决方案
- 使用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语句无法识别运算的问题。
- 使用< bind />标签
<bind name="key_offset" value="(pageNum-1)*pageSize"></bind>
select * from table limit #{key_offset},#{pageSize}
项目中我的SQL稍微复杂点儿,用的第二种方式,建议大家也用第二种。
实际上如果不想这样做还是将offset的值计算好之后再传入比较好(因为我要兼容Oracle的接口,所以这样搞了)。