# page-sync **Repository Path**: x7h66/page-sync ## Basic Information - **Project Name**: page-sync - **Description**: MySQL 用户表的游标 + 时间戳+CompletableFuture分页示例,使用MyBatisXML查询,并通过 CursorPaginationComponent 复用分页流程。 组件负责: Base64 URL-safe 游标生成和解析 CompletableFuture 并行执行总数统计和列表查询 pageSize + 1 判断是否还有下一页 根据最后一条数据生成 nextCursor - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-27 - **Last Updated**: 2026-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # page-sync MySQL 用户表的游标 + 时间戳 + CompletableFuture 分页示例,使用 MyBatis XML 查询,并通过 `CursorPaginationComponent` 复用分页流程。 组件负责: - Base64 URL-safe 游标生成和解析 - `CompletableFuture` 并行执行总数统计和列表查询 - `pageSize + 1` 判断是否还有下一页 - 根据最后一条数据生成 `nextCursor` image ## 建表 ```bash mysql -uroot -p page_sync < src/main/resources/db/user.sql ``` 也可以直接用 Docker 启动 MySQL,初始化脚本会自动执行: ```bash docker compose up -d ``` ## 启动 ```bash MYSQL_URL='jdbc:mysql://localhost:3306/page_sync?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true' \ MYSQL_USERNAME=root \ MYSQL_PASSWORD=root \ JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home \ mvn spring-boot:run ``` ## 查询第一页 ```bash curl 'http://localhost:8088/api/users?pageSize=10&sortOrder=desc' ``` 响应中的 `nextCursor` 用于查询下一页。 ## 查询下一页 ```bash curl 'http://localhost:8088/api/users?pageSize=10&sortOrder=desc&cursor=上一页返回的nextCursor' ``` 核心分页条件: ```sql create_time < #{cursorMark.createTime} OR (create_time = #{cursorMark.createTime} AND id < #{cursorMark.id}) ``` 排序条件: ```sql ORDER BY create_time DESC, id DESC ```