mysql 使用 limit 实现底层分页(附源码)

原理解析:

<select id="queryProductList" resultType="com.pojo.Product">
	SELECT *
	FROM
	tb_product
	ORDER BY
	priority DESC
	LIMIT #{rowIndex},#{pageSize};
</select>

上面是一段 mybatis 里面的一段分页的代码,区别不大,我们直接按这段代码来看。从代码可以看出,数据库的底层分页很简单,只需要一个属性:LIMIT(大小写都可以),然后再传入两个参数就行。第一个参数:rowIndex,表示的是从数据库的第几行开始获取数据;第二个参数:pageSize,表示的是从数据库获取的一页的条数是多少。

总而言之,我们只需要告诉数据库,我们要从第几行开始拿多少条数据就行了。

但是,前端页面往往传给我们的是当前的页码(pageIndex)和每页的条数(pageSize),很明显这里的 pageIndex 不是 rowIndex ,所以我们需要将页码转换成表示数据库中第几行的行码 rowIndex。

public static int calculateRowIndex(int pageIndex, int pageSize){
	return (pageIndex > 0) ? (pageIndex - 1) * pageSize : 0;
}

我们可以把这个转换的过程封装一个静态方法,方便调用。方法的作用就是将页码转换成行码。

例子:

我们现在需要获取第三页(pageIndex=3)的10条数据(pageSize=10),调用方法将 pageIndex 进行转换,

pageIndex > 0 

所以 rowIndex =  ( pageIndex - 1 ) * pageSize 

就是 rowIndex == (3-1)*10 == 20

表示要从数据库的第20行开始拿10条数据出来。

扫描二维码关注公众号,回复: 3636344 查看本文章

~~~~~

猜你喜欢

转载自blog.csdn.net/weidong_y/article/details/82217454