Java分页原理及常用分页方法

来源:互联网 发布:系统更新软件 编辑:程序博客网 时间:2024/06/06 01:39

分页技术简介

分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分。如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们阅读书籍很类似,我们不能把整本书的全部内容写在一页纸上。

为什么要分页?

1、加载少量数据,减少客户的和服务器数据交互,降低服务器压力。
2、增强用户体验,每次加载数据量少,加载速度自然就快,用户体验就好。

常见分页样式:

1、 传统分页(分页工具栏),如百度的分页:

2、 自动加载:如QQ空间下拉自动加载数据

  • 传统分页与下拉式分页对比

传统分页可以明确数据信息,数量等;
下拉式无法明确数据量等信息,分页后之前从信息还在页面上。

常见分页实现方式

  • Java程序分页的实现主要是用List 接口中的subList(int startIndex,int endIndex)方法,这种方式也称为程序内存分页。
  • 使用数据库的SQL语句实现数据分页。适用于数据量较大,访问频度较低的操作。如果数据量大,访问频度又高,可以参考大数据分页。

关于内存分页
当数据量较小时推荐使用。使用subList进行分页时,如果数据量比较大是一个非常耗费系统资源的方案。
目前web项目有许多分布式系统,可能有多个系统访问同一个数据库,那么对数据库的开销就比较大了,这时可以考虑对内存分页进行优化,例如利用程序缓存处理机制等。
其实真正的内存分页不是那么简单的事情,要实现一个完整的通用的机制,不是一两个小时就能搞定的。首先有一个数据记录的服务器缓存问题,然后才是数据记录分页问题,这个相对好解决一点,但第一个问题就不太好组织。因为缓存问题涉及到数据的缓存位置,缓存时间,删除时间和利于查询的数据组织问题。

数据库分页:
数据库分页的原理比较明确了,根据需要取结果集中的一部分就是了,没什么好说的。其实这样有时候数据缓存在数据库系统内,可能比内存分页要智能一点。

SQL分页
使用SQL语句实现分页
使用数据库自带的分页语法,获取分页数据,如MySQL的limit关键字,oracle的rownum关键字等

以下是常见的分页SQL语句
1. MySQL分页查询语句:
Select * from t_table limit 1,10;

  1. PostgreSQL分页查询语句
    Select * from t_table limit 10 offset 0;

  2. Oracle分页查询SQL:
    Select * from (
    Select t.*,rownum rn from t_table t where rownum <=10
    ) where rn >=1;

  3. 使用hibernate框架进行分页:
    创建query或者Criteria对象,查询时,设置firstResult和maxResult属性
    eg:
    String hql = “from student_table”;
    Query q = session.createQuery(hql);
    q.setFirstResult(0);
    q.setMaxResult(10);
    List l = q.list();

  4. Mybatis分页
    由于mybatis的SQL语句一般都是通过配置文件手工写的,可以直接参考SQL分页。