尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Spring boot jdbc通用分页能力封装

Spring boot jdbc通用分页能力封装
📅 发布时间:2026/6/20 5:24:07

Spring jdbc的API默认不提供分页接口封装,我们框架或者项目系统使用Spring jdbc开发并且要考虑对多种数据库数据源分页支持时,常见做法是按不同数据库编写对应分页实现方法(mybatis等框架也是采用databaseId配置或者分页插件支持按不同数据库分页),那么有没有相对通用的方法呢?答案是肯定的,那就是使用游标实现通用分页查询,这样的好处是不用考虑不同数据库分页语法差异、便于多数据库分页统一适配,下面分享如何使用Spring jdbc游标分页、游标分页注意事项以及其他分页实现方式,希望能对您有所帮助。

游标分页原理

通过结果集(ResultSet)类型移动结果集位置实现分页。结果集类型包括如下三种:

  1. ResultSet.TYPE_FORWARD_ONLY:结果集的游标只能向下滚动,创建Statement没指定时默认使用类型。

  2. ResultSet.TYPE_SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库变化时,当前结果集不变。

  3. ResultSet.TYPE_SCROLL_SENSITIVE:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。

说明:TYPE_FORWARD_ONLY类型通过next方法移动,其他类型通过 absolute(int row)方法移动,absolute方法说明如下:
public boolean absolute(int row) :将游标移到参数row指定的行号。如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false。
参考:https://www.runoob.com/manual/jdk11api/java.sql/java/sql/Connection.html里createStatement和prepareStatement描述:
描述

Spring jdbc游标分页实现

为满足大多数分页场景,这里主要通过分页接口封装、分页接口实现介绍游标分页,主要步骤如下:

1.初始化项目

pom里主要添加"spring-boot-starter、spring-boot-starter-jdbc、spring-boot-starter-web、spring-boot-starter-test、h2"五个依赖包,其中用h2为内存数据库,便于测试,maven依赖如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.4.240</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.5.7</version>
</dependency>

添加application.yml,主要增加内存数据库h2和分页方式page.type配置:

server:
port: 8080
servlet:
context-path: /api
spring:
datasource:
name: h2
driverClassName: org.h2.Driver
url: jdbc:h2:mem:test
username: sa
password:
# 初始化数据库,spring boot自带功能,自动配置类SqlInitializationAutoConfiguration
sql:
init:
enabled: true
username: sa
password:
platform: h2
schema-locations: classpath:sql/schema-h2.sql
dataLocations: classpath:sql/data-h2.sql
mode: always
#h2 web consloe远程访问
h2:
console:
settings:
web-allow-others: true
#通过URL/h2访问h2 web consloe
path: /h2
#启动h2 web consloe
enabled: true
page:
#分页查询类型,cursor-通用游标类型分页
type: cursor
logging:
level:
com.tony.samples.jdbc: debug
com.zaxxer.hikari: debug
org.springframework: debug

在src/main/resources/sql下添加h2表和数据初始化文件“schema-h2.sql、data-h2.sql”:

表初始化schema-h2.sql:

DROP TABLE IF EXISTS T_USER;
CREATE TABLE T_USER(
id IDENTITY PRIMARY KEY,
user_name VARCHAR(225) NOT NULL,
pwd VARCHAR(225) NOT NULL,
age INT
);

数据初始化data-h2.sql:

INSERT INTO t_user(user_name,pwd,age) VALUES ('张三1','2f3fe8werhlt', 1);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三2','2f3fe8werhlt', 2);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三3','2f3fe8werhlt', 3);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三4','2f3fe8werhlt',4);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三5','2f3fe8werhlt', 5);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三6','2f3fe8werhlt', 6);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三7','2f3fe8werhlt',7);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三8','2f3fe8werhlt', 8);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三9','2f3fe8werhlt', 9);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三10','2f3fe8werhlt', 10);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三11','2f3fe8werhlt', 11);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三12','2f3fe8werhlt', 12);
INSERT INTO t_user(user_name,pwd,age) VALUES ('张三13','2f3fe8werhlt', 13);

2.分页接口封装

为满足?号参数、map绑定参数、实体类绑定参数查询需求,并且支持泛型查询参数和泛型返回列表,封装四个泛型分页接口方法,如果不满足查询需求可以在此基础上添加,分页接口代码如下:

package com.tony.samples.jdbc.service;
import com.tony.samples.jdbc.entity.PageResult;
import

相关新闻

  • 2025年江苏靠谱的微粉数控喷砂机源头厂家、移动式喷砂机源头
  • 2025首饰上门回收公司TOP5权威推荐:甄选专业奢品上门回
  • 2025年质量好的小角度超薄铰链/衣柜超薄铰链厂家最新TOP实力排行

最新新闻

  • Ascend大模型预训练实战:硬件适配、数据对齐与梯度防控
  • Redis Memory Analyzer与Python集成:API使用详解
  • 2026十大离婚律师综合口碑榜单,价格透明服务优质精选 - mypinpai
  • 深入解析S12XDBG硬件调试模块:从比较器、状态机到复杂断点实战
  • 从环境变量到密码安全:Aero处理敏感配置的完整方案
  • CANN/ge获取HCCL跟随流数量

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号