About Pagination

About Pagination.

最近我开式对分页技术有了深刻的认识,经过了这么多次脑热,终于理解了分页技术的内涵。
mysql,oracle等等这些数据库之所以有limit这类东西,就是为了检索快速。
分页也是为了检索迅速,让数据以最快的速度展示给使用者。
假如没有了分页,一次性取全部数据。当数据量非常大的时候,取数据所消耗的时间将会非常大。
这样的话用户的体验就变为空谈。

mysql分页:

mysql分页需要几个数值:

  • totalCount
    所有满足条件数据的数量
  • size(page-size)
    每一页数据的数量
  • page
    第几页

只有同时知道了这三个数据才能够做分页,才能够在程序中返回例如next_page, first_page, last_page这些类似的分页链接。

i. 最大页数

maxPage = if(size != 0) (totalCount + (size - 1))/size else 0

ii. 第一页计算方法

page=1&size=${size}

iii. 前一页计算方法

val prevNum:Int =
    page match {
        case p if p > maxPage => maxPage
        case p if p > 1 => p - 1 
        case _ => 0
    }     
page=${prevNum}&size=${size}

iv. 下一页计算方法

val hasNext:Boolean = page * size < totalCount
if(hasNext) "page=${page+1}&size=${size}" else ""

v. 最后一页计算方法

page=${maxPage}&size=${size}