原理解析:
<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条数据出来。
~~~~~