`
rensanning
  • 浏览: 3552488 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38217
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607582
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682770
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89518
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402108
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69759
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91828
社区版块
存档分类
最新评论

Web API分页

    博客分类:
  • Java
 
阅读更多
(一)分页类型
逻辑分页(客户端分页):从数据库将所有记录查询出来,客户端截取当前页的数据。
物理分页(数据库端分页):只从数据库中查询当前页的数据。

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

    本项目“WebApiPagination”专注于解决Web API中的一个重要问题:数据分页。分页在处理大量数据时至关重要,它能提高应用程序的性能,减少网络传输的数据量,提升用户体验。我们将探讨如何在ASP.NET Core Web API中...

    通用分页插件有详细解释API

    本文将详细介绍这种分页插件,以及其API的使用方法。 首先,分页插件的基本原理是将大量的数据分隔成多个小块(页),用户每次只请求和显示其中的一块,通过导航链接(如“上一页”、“下一页”)来浏览其他部分。...

    WEB分页(C#)一些自己的想法和网上的东西。

    在Web开发中,分页是一种常见的用户界面设计技术,它用于处理大量数据并提供良好的用户体验。C#作为.NET框架的主要编程语言,广泛应用于Web应用程序的开发。本篇将围绕"WEB分页(C#)"这个主题,结合个人的想法和...

    .Net Core3.1 WebApi 项目框架

    基于博客园大神文章创作的框架,自用,使用的是sqlsugar,后期改成freesql(https://www.cnblogs.com/huguodong/p/13414560.html).使用到的技术有Swagger,JWT权限验证 ,仓储模式,Sqlsugar+异步泛型仓储,AutoFac,...

    Android 请求 WebAPI的案例

    在Android开发中,与WebAPI进行交互是常见的需求,例如获取服务器数据、发送用户信息等。本案例"Android请求WebAPI"将详细讲解如何在Android应用中实现这一功能。WebAPI通常指的是基于HTTP协议的RESTful API,允许...

    C#基于数据库的DataGrid分页示例代码

    这个示例代码主要展示了如何从数据库中获取数据,并将其分页显示在DataGrid中,使得用户可以方便地浏览大量信息,而无需一次性加载所有数据,从而提高程序性能和用户体验。 首先,我们需要理解C#中的数据访问技术。...

    在MVC4中借助jQueryeasyUI实现登录,显示(分页),查询,删除

    在本文中,我们将深入探讨如何在ASP.NET MVC4框架中结合jQuery EasyUI库来实现一个功能完备的用户界面,包括登录、数据展示、查询(分页)以及删除操作。jQuery EasyUI是一个基于jQuery的轻量级插件集合,它提供了一...

    ASP.NET Web API 2 框架揭秘,带完整目录和源码

    5. **OData支持**:ASP.NET Web API 2 支持OData协议,允许客户端通过查询语言(如$top、$skip、$filter)对数据进行筛选、排序和分页,增强了服务的灵活性和可扩展性。 6. **Web API控制器**:Web API 使用特殊的...

    webapi新手篇

    WebAPI新手篇是一个针对初学者的教程,旨在帮助他们理解和掌握Web API的开发技术。Web API是基于HTTP协议,用于构建服务端应用程序的一种接口,它允许客户端(如浏览器、移动应用或桌面应用)通过发送HTTP请求来获取...

    10种 js web分页效果

    在实际应用中,可以利用现有的分页插件或库,如jQuery Pagination、Bootpag、Paging.js等,它们提供了丰富的配置选项和便捷的API,能快速集成到项目中。 总的来说,JavaScript Web分页效果是提高用户体验的重要手段...

    c# MVC完整项目 EF连接数据库 webapi

    在实际项目中,还需要考虑错误处理、权限控制、数据验证、分页、排序等功能,这些都是MVC + EF + WebAPI组合应用时常见的扩展点。这个项目作为初学者的DEMO,提供了一个基础的结构,有助于理解这些技术如何协同工作...

    WebApi增删改查基本操作

    在本文中,我们将深入探讨如何使用C#和Web API实现基本的CRUD(创建、读取、更新和删除)操作。Web API是构建RESTful服务的框架,它允许客户端通过HTTP协议与服务器进行交互,非常适合用于移动应用和网页应用的数据...

    jquery mobile web api开发例子

    在实际项目中,还可以扩展这些基础,如添加分页、搜索过滤等功能,同时考虑错误处理和API版本控制,以提供更健壮的服务。此外,对于大型应用,还可以考虑使用OAuth或JWT进行身份验证和授权,以增加安全性。最后,...

    MVC WebApi(发送对象)(包含Web端和客户端)

    **MVC WebApi(发送对象)(包含Web端和客户端)** 在开发应用程序时,有时候我们需要在不同的客户端之间传输复杂的数据结构,例如对象。MVC(Model-View-Controller)和WebApi是两种常见的用于构建服务端应用的技术...

    web实现简单分页

    它们提供API让你设置当前页码、总页数和每页记录数,自动生成分页导航元素,并提供回调函数供你处理数据更新。 总的来说,实现Web分页涉及数据库查询优化、服务器处理逻辑和前端交互设计。通过合理的架构和合适的...

    学习.net web api开发的好例子

    这只是一个基础示例,实际开发中,你还可以实现更复杂的操作,如分页、过滤、排序以及CRUD操作,同时可以使用身份验证、授权等高级特性来增强API的安全性。通过深入学习和实践,你可以熟练掌握.NET Web API的开发,...

    Web Api使用详解(全部实例讲解,可直接运行看效果)__(0521).rar

    本教程将深入讲解Web API的各个方面,并通过实例帮助你理解和掌握其核心概念。 1. **Web API的基本架构** Web API是构建在ASP.NET MVC框架之上的,它引入了Controllers和Actions的概念,使得处理HTTP请求变得简单...

    将Web层分页封装成通用模块

    在Web开发中,分页是常见的功能之一,特别是在数据量庞大的场景下,为了提高用户体验,我们需要将大量数据分批次展示,而不是一次性加载所有内容。本文将深入探讨如何将Web层的分页功能封装成一个通用模块,实现代码...

    一个WEB的分页控件

    在Web开发中,分页控件是不可或缺的一部分,它用于处理大量数据的显示,提高用户体验,避免一次性加载过多数据导致页面加载慢或者内存消耗过大。本篇将详细讲解Web分页控件的设计原理、实现方式以及相关技术点。 ...

    DapperExtensions写的webapi demo

    标题 "DapperExtensions写的webapi demo" 描述的是一个基于.NET Core的WebAPI项目,其中使用了ORM(对象关系映射)框架Dapper及其扩展库DapperExtensions来处理数据库操作。这个项目提供了一个示例,展示了如何在Web...

Global site tag (gtag.js) - Google Analytics