(一)分页类型
逻辑分页(客户端分页):从数据库将所有记录查询出来,客户端截取当前页的数据。
物理分页(数据库端分页):只从数据库中查询当前页的数据。
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/
分享到:
相关推荐
本项目“WebApiPagination”专注于解决Web API中的一个重要问题:数据分页。分页在处理大量数据时至关重要,它能提高应用程序的性能,减少网络传输的数据量,提升用户体验。我们将探讨如何在ASP.NET Core Web API中...
本文将详细介绍这种分页插件,以及其API的使用方法。 首先,分页插件的基本原理是将大量的数据分隔成多个小块(页),用户每次只请求和显示其中的一块,通过导航链接(如“上一页”、“下一页”)来浏览其他部分。...
在Web开发中,分页是一种常见的用户界面设计技术,它用于处理大量数据并提供良好的用户体验。C#作为.NET框架的主要编程语言,广泛应用于Web应用程序的开发。本篇将围绕"WEB分页(C#)"这个主题,结合个人的想法和...
基于博客园大神文章创作的框架,自用,使用的是sqlsugar,后期改成freesql(https://www.cnblogs.com/huguodong/p/13414560.html).使用到的技术有Swagger,JWT权限验证 ,仓储模式,Sqlsugar+异步泛型仓储,AutoFac,...
在Android开发中,与WebAPI进行交互是常见的需求,例如获取服务器数据、发送用户信息等。本案例"Android请求WebAPI"将详细讲解如何在Android应用中实现这一功能。WebAPI通常指的是基于HTTP协议的RESTful API,允许...
这个示例代码主要展示了如何从数据库中获取数据,并将其分页显示在DataGrid中,使得用户可以方便地浏览大量信息,而无需一次性加载所有数据,从而提高程序性能和用户体验。 首先,我们需要理解C#中的数据访问技术。...
在本文中,我们将深入探讨如何在ASP.NET MVC4框架中结合jQuery EasyUI库来实现一个功能完备的用户界面,包括登录、数据展示、查询(分页)以及删除操作。jQuery EasyUI是一个基于jQuery的轻量级插件集合,它提供了一...
5. **OData支持**:ASP.NET Web API 2 支持OData协议,允许客户端通过查询语言(如$top、$skip、$filter)对数据进行筛选、排序和分页,增强了服务的灵活性和可扩展性。 6. **Web API控制器**:Web API 使用特殊的...
WebAPI新手篇是一个针对初学者的教程,旨在帮助他们理解和掌握Web API的开发技术。Web API是基于HTTP协议,用于构建服务端应用程序的一种接口,它允许客户端(如浏览器、移动应用或桌面应用)通过发送HTTP请求来获取...
在实际应用中,可以利用现有的分页插件或库,如jQuery Pagination、Bootpag、Paging.js等,它们提供了丰富的配置选项和便捷的API,能快速集成到项目中。 总的来说,JavaScript Web分页效果是提高用户体验的重要手段...
在实际项目中,还需要考虑错误处理、权限控制、数据验证、分页、排序等功能,这些都是MVC + EF + WebAPI组合应用时常见的扩展点。这个项目作为初学者的DEMO,提供了一个基础的结构,有助于理解这些技术如何协同工作...
在本文中,我们将深入探讨如何使用C#和Web API实现基本的CRUD(创建、读取、更新和删除)操作。Web API是构建RESTful服务的框架,它允许客户端通过HTTP协议与服务器进行交互,非常适合用于移动应用和网页应用的数据...
在实际项目中,还可以扩展这些基础,如添加分页、搜索过滤等功能,同时考虑错误处理和API版本控制,以提供更健壮的服务。此外,对于大型应用,还可以考虑使用OAuth或JWT进行身份验证和授权,以增加安全性。最后,...
**MVC WebApi(发送对象)(包含Web端和客户端)** 在开发应用程序时,有时候我们需要在不同的客户端之间传输复杂的数据结构,例如对象。MVC(Model-View-Controller)和WebApi是两种常见的用于构建服务端应用的技术...
它们提供API让你设置当前页码、总页数和每页记录数,自动生成分页导航元素,并提供回调函数供你处理数据更新。 总的来说,实现Web分页涉及数据库查询优化、服务器处理逻辑和前端交互设计。通过合理的架构和合适的...
这只是一个基础示例,实际开发中,你还可以实现更复杂的操作,如分页、过滤、排序以及CRUD操作,同时可以使用身份验证、授权等高级特性来增强API的安全性。通过深入学习和实践,你可以熟练掌握.NET Web API的开发,...
本教程将深入讲解Web API的各个方面,并通过实例帮助你理解和掌握其核心概念。 1. **Web API的基本架构** Web API是构建在ASP.NET MVC框架之上的,它引入了Controllers和Actions的概念,使得处理HTTP请求变得简单...
在Web开发中,分页是常见的功能之一,特别是在数据量庞大的场景下,为了提高用户体验,我们需要将大量数据分批次展示,而不是一次性加载所有内容。本文将深入探讨如何将Web层的分页功能封装成一个通用模块,实现代码...
FastAPI是一款现代、高性能的Web API框架,它基于Python 3.6+,而LayUImini则是一个轻量级的前端组件库,适合构建数据驱动的管理界面。 首先,让我们关注`address_code.py`。这个文件可能包含了处理城市编码或地址...
在Web开发中,分页控件是不可或缺的一部分,它用于处理大量数据的显示,提高用户体验,避免一次性加载过多数据导致页面加载慢或者内存消耗过大。本篇将详细讲解Web分页控件的设计原理、实现方式以及相关技术点。 ...