(一)分页类型
逻辑分页(客户端分页):从数据库将所有记录查询出来,客户端截取当前页的数据。
物理分页(数据库端分页):只从数据库中查询当前页的数据。
MyBatis默认的RowBounds采用的是逻辑分页。
private void skipRows(ResultSet rs, RowBounds rowBounds) throws SQLException {
if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
if (rowBounds.getOffset() != RowBounds.NO_ROW_OFFSET) {
rs.absolute(rowBounds.getOffset()); // skip rows by rowBounds.offset
}
} else {
for (int i = 0; i < rowBounds.getOffset(); i++) { // skip row one by one till we hit rowBounds.offset
rs.next();
}
}
}
但由于性能的问题,大多数系统都会采用物理分页。
(二)物理分页方式
(1)Offset Pagination
访问API时传递参数limit/offset或pageNumber/pageSize
GET /elements?limit=100&offset=100
=> the client receives the next 100 element.
OFFSET 语句在数据量大的情况下会很慢。
由于排序及数据被修改删除会产生各页结果变化。
Spring Data
/users?size=10&page=2&sort=id,desc
org.springframework.data.web.PageableHandlerMethodArgumentResolver
org.springframework.data.web.SortHandlerMethodArgumentResolver
(2)Keyset Pagination
GET /elements?pageSize=100&uuid=45678
需要额外字段
记录时间字段,date_created或date_modified
GET /elements?pageSize=100&modifiedSince=1504224000
=> the client receives the 100 elements since 1504224000. The last element of the page was modified on 1506816000.
And so on.
同一批登录的大量数据无法比较难实现(时间需要精确到毫秒才行)
(3)Continuation Tokens (aka Cursors)
Timestamp_Offset_Checksum
SELECT * FROM elementTable
WHERE (
timestampColumn > T
OR (timestampColumn = T AND idColumn > I)
)
AND timestampColumn < now()
ORDER BY timestampColumn asc, idColumn asc;
Timestamp + ID,参考:
https://blog.philipphauer.de/web-api-pagination-timestamp-id-continuation-token/
分享到:
相关推荐
WEB分页(C#) 一些自己的想法和网上的东西。
Web API导航 这是一个使用ASP核心Web API的简单Web API导航
通用分页插件
基于博客园大神文章创作的框架,自用,使用的是sqlsugar,后期改成freesql(https://www.cnblogs.com/huguodong/p/13414560.html).使用到的技术有Swagger,JWT权限验证 ,仓储模式,Sqlsugar+异步泛型仓储,AutoFac,...
C#基于数据库的DataGrid分页示例代码,从数据库读取内容并分页显示,遗憾的是,数据库遗失了,不过代码还是可以参考的,必竟是挺简单的基础级代码,分页也是大家在日常统编程中常见到的事。
在MVC4中实现登录,jQueryeasyUI中的gridview实现显示,查询(分页),删除 1积分差不多随缘
网络产品 用于Northwind产品管理的Web应用程序和Web API。 该代码是用.NET Core编写的。 自己的目标 RESTful WebApi ...NProducts.WebApi-具有RESTful产品服务的ASP.NET Core WebAPI NProducts.Tes
jquery mobile 通过asp.net web api2 提供数据接口,带滑动分页示例
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
教学-传智播客-项目视频经典之作巴巴运动网106集-27实现Web层的分页功能源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
该博客后端api基于.net5和efcore构建,使用webApi进行接口的开发和管理。主要包含以下功能: 用户管理:包括用户注册、登录、修改密码等功能。 文章管理:包括文章的增删改查、文章分类管理、文章标签管理等功能。 ...
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
用于实现 .net下开发web使用的Jquery+ajax的分页代码
C#,asp.net操作mongodb实例,封装【新增,修改,查询,分页查询,删除,批量更新,批量删除,条件查找等】内有一个实体类,操作数据库封装类,日志类,web页面,vs打开直接运行
AdvancePagination.Demo:ASP.NET核心WebApi中的高级分页
asp.net core框架搭建1-搭建webapi,通过ado操作mysql数据库,对数据进行增删改查,分页等操作,接口都已实现,配置号数据库连接串后,可以直接运行查看效果。 效果演示: ...
magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller,Service,Dao,Mapper,XML,VO等Java对象即可完成常见的HTTP API接口开发 ...
luis.angular.paging 使用 AngularJS 和 ASP.NET Web API 演示服务器端分页
反射IT.Blazor.Paging 使用OData或Web API的Blazor WebAssembly的分页解决方案
Api-pager-api.zip,RailsPager API的简易API分页,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程。