当前位置: 首页 > news >正文

Spring boot jdbc通用分页能力封装

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
http://www.jsqmd.com/news/56590/

相关文章:

  • 2025年评价高的BELDEN百通电缆百通总线线缆厂家最新推荐排行榜
  • 2025年热门的不锈钢标识标牌厂家最新推荐权威榜
  • 2025年江苏靠谱的微粉数控喷砂机源头厂家、移动式喷砂机源头
  • 2025年江苏45#钢矩形方管生产厂家、矩形方管加工厂、Q5
  • 2025年口碑好的胶液乳化泵TOP品牌厂家排行榜
  • 高性能AI股票预测分析报告 - 2025年12月01日
  • 2025年知名的非保温型抗爆墙/消防抗爆墙最新TOP厂家排名
  • 2025年比较好的衣柜平薄铰链/三维平薄铰链用户好评厂家排行
  • 2025首饰上门回收公司TOP5权威推荐:甄选专业奢品上门回
  • 2025年长三角Q390矩形方管供应商、矩形方管品牌供应商推
  • 实用指南:LSTM(Long Short-Term Memory)个人理解
  • 2025年质量好的小角度超薄铰链/衣柜超薄铰链厂家最新TOP实力排行
  • 2025专业名牌包/名表/珠宝上门回收公司TOP5权威推荐
  • 2025年度镀锌方管服务商家推荐:耐腐蚀镀锌方管定制生产优质
  • 《代码大全》读后感(7)
  • 2025年口碑好的少儿编程加盟实力项目推荐榜
  • 2025年靠谱的铝合金切削液厂家推荐及选择参考
  • PNP机器人将要亮相2025 ROS中国区大会|发表演讲、共探具身智能新未来 - 详解
  • 2025年评价高的TPE材料优质厂家推荐榜单
  • 25fall 做题记录 - December - Amy
  • 2025年中国比较不错的服装定制专业加盟公司推荐:比较好的服
  • 2025年度无缝方管专业厂家排名:无缝方管供应商推荐
  • 增强AI股票预测分析报告 - 2025年12月01日
  • 解密Prompt系列65. 三巨头关于大模型内景的硬核论文
  • 2025年中国监狱电视教育系统服务商十大推荐:监狱电视教育系
  • 2025年质量好的氧气减压器最新TOP品牌厂家排行
  • 2025年知名的脱模剂厂家推荐及选购参考榜
  • 优质的出行网约车公司推荐排行榜单? 出行网约车品牌 出行网约车公司 出行网约车服务商 出行网约车渠道
  • 【GitHub每日速递 20251201】30 秒部署热点助手,TrendRadar 让你告别无效信息轰炸!
  • 靠谱的地下室垃圾车厂家推荐排行榜?地下室垃圾车厂家 地下室垃圾车产品 地下室垃圾车供应厂家 地下室垃圾车工厂 地下室垃圾车生产厂家 地下室垃圾车源头厂家