1. 场景描述
目前大部分的应用程序中都会用到分页功能,以便减少前端浏览器及后台服务器的压力,以及其他方面的考虑。
(1)分页从概念上可分为逻辑分页和物理分页,逻辑分页主要是通过应用程序(前端或者后端)来分页,是从数据库中获取查询全部数据,然后通过java代码处理或前端处理后,分页展示给使用用户。
(2)物理分页,物理分页是指分页操作是在数据库完成的,按照数据库关键字进行分页,应用程序中按照数据库分页关键字进行sql拼接后执行查询,完成分页功能。
2. 解决方案
2.1 逻辑分页
逻辑分页就不多说,不同的项目不一样,原理就是从数据库获取数据后,根据业务逻辑进行处理而已。
2.2 物理分页
不同的数据库使用的分页关键及方式不一样,简单介绍下常用的Oracle、mysql及postgresql怎么进行的分页。
2.2.1 mysql 分页
(1) 分页语法
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
(2) 分页说明
select * from table limit 0,10; --从第0条开始,查询10条数据。
select * from table limit 10,10; --从第10条开始,查询10条数据。
---一般常用的
select * from table limit 10;
相当于
select * from table limit 0,10;
2.2.2 postgresql分页。
(1) 分页语法
select * from persons limit A offset B;
(2) 分页说明
A就是你需要显示多少行;
B就是查询的起点位置。
2.2.3 oracle分页
(1) 分页语法
select rownum,t.* from F_KPI544_FEE_DETL t where rownum <10;
(2) 分页说明
oracle是使用rownum进行的分页,rownum只是一个伪列,每一张表中都有。
2.3 方案说明
(1)本文只是大概介绍了下分页原理及各个数据库如何分页,分页中还存在其他的问题,比如mysql数据库分页offset越大,效率越低等问题就不详说了。
(2)目前Java应用中常用的ORM框架-Mybatis,可以使用插件pagerHelper进行分页,支持oracle、mysql、postgresql等数据库。