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

Spring Boot+MyBatis:用 PageHelper 实现 Oracle 12c 的 OFFSET 分页

在分页场景中,不同数据库的分页语法差异很大 —— 比如 MySQL 用LIMIT,而Oracle 12c 开始支持更灵活的OFFSET ... FETCH语法。今天结合 PageHelper,分享如何在 Spring Boot 中适配 Oracle 12c 的分页方式。

一、PageHelper 基础:引入与自动配置

首先在 Spring Boot 中引入 PageHelper 依赖(以 Maven 为例):

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.7</version> <!-- 建议用最新稳定版 --> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>4.6</version> <!-- 适配SQL解析的版本 --> </dependency>

Spring Boot 会自动配置 PageHelper,无需额外代码~

二、核心:自定义 Oracle 12c 分页方言

PageHelper 默认的 Oracle 方言用的是ROWNUM语法(适配旧版本),而 Oracle 12c 支持更简洁的OFFSET ... FETCH。我们需要自定义方言,重写分页 SQL 生成逻辑

步骤 1:编写 Oracle 12c 方言类

继承AbstractHelperDialect,实现getPageSql方法,拼接OFFSET ... FETCH语法:

@Component public class Oracle12cDialect extends AbstractHelperDialect { // 注册方言别名,后续配置用 static { PageAutoDialect.registerDialectAlias("oracle12c", Oracle12cDialect.class); } @Override public String getPageSql(String sql, Page page, CacheKey pageKey) { StringBuilder sqlBuilder = new StringBuilder(sql.length() + 40); sqlBuilder.append(sql); // 拼接Oracle 12c的分页语法:OFFSET 跳过行数 FETCH NEXT 取行数 ROWS ONLY int offset = page.getStartRow(); int limit = page.getPageSize(); sqlBuilder.append(" OFFSET ").append(offset).append(" ROWS FETCH NEXT ").append(limit).append(" ROWS ONLY"); pageKey.update(offset); pageKey.update(limit); return sqlBuilder.toString(); } @Override public Object processPageParameter(MappedStatement ms, Map<String, Object> paramMap, Page page, BoundSql boundSql) { // 这里无需额外参数(OFFSET/FETCH直接拼接在SQL中),返回原参数即可 return paramMap; } }

步骤 2:配置方言

application.properties中指定使用自定义的oracle12c方言:

# 指定Oracle 12c方言 pagehelper.helper-dialect=oracle12c # 分页合理化(pageNum<=0查第1页,pageNum>总页数查最后一页) pagehelper.reasonable=true # 支持通过Mapper接口传分页参数 pagehelper.support-methods-arguments=true

三、使用示例:一行代码实现分页

在 Service 层调用PageHelper.startPage,后续 MyBatis 查询会自动拼接 Oracle 12c 的分页 SQL:

@Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Page<User> listUsers(int pageNum, int pageSize) { // 1. 开启分页(pageNum:页码;pageSize:每页条数) PageHelper.startPage(pageNum, pageSize); // 2. 执行查询(自动拼接OFFSET ... FETCH) List<User> userList = userMapper.selectAll(); // 3. 包装为Page对象(包含总条数、分页信息) return new PageInfo<>(userList).toPage(); } }

四、对比:Oracle 旧版与 12c 分页语法

  • 旧版(ROWNUM):需要嵌套子查询,语法繁琐
    SELECT * FROM ( SELECT t.*, ROWNUM rn FROM (SELECT * FROM user) t WHERE ROWNUM <= 20 ) WHERE rn > 10
  • Oracle 12c(OFFSET/FETCH):简洁直观(PageHelper 通过自定义方言自动生成)
    SELECT * FROM user OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

通过自定义 PageHelper 方言,就能让 MyBatis 完美适配 Oracle 12c 的现代分页语法啦~

完整 Oracle 12c 分页 Demo(SpringBoot+MyBatis+PageHelper)

http://www.zskr.cn/news/159175.html

相关文章:

  • LSTM量化交易策略的环境适应性与入参稳定性评估
  • 2025年兰州口碑好的水性艺术涂料实力厂家选哪家,微晶石艺术漆/艺术漆/艺术肌理漆/环保艺术涂料,水性艺术涂料产品哪家好 - 品牌推荐师
  • 【优化协调】基于小生境粒子群算法含光伏电站配电网有功无功协调优化附Matlab代码
  • 强化学习结合LSTM的量化交易策略奖励函数与入参关联
  • 传感器|基于改进贪心算法的最佳传感器位置选择(Matlab代码实现)
  • Claude Skills动态工具过滤深度解析:智能代理开发的革命性突破,收藏必备!
  • CSV大文件处理全流程:数据清洗、去重与格式标准化深度实践
  • 2026企业微信SCRM新趋势:AI如何助力客户转化率提升300%
  • 【车辆控制】基于模型预测控制MPC的摩托车主动悬挂控制附Matlab代码
  • 云舟观测报表管理功能:从业务到智能运维
  • 学长亲荐8个AI论文工具,自考毕业论文格式规范必备!
  • NC verilog :force命令
  • 2025年济南做得好的翅片管公司有哪些,乏风取热箱/表冷器/翅片管/新风机组/干冷器/空调机组/空气幕/冷却器/散热器翅片管企业哪家好 - 品牌推荐师
  • 课后作业2
  • Type Hints:花1小時寫,省18小時除錯的投資回報率分析
  • 学长亲荐9个AI论文工具,研究生高效写作必备!
  • Qt 中将 QWidget 改为模态的方法
  • 2025年6款AI论文工具实测:10分钟生成万字问卷类论文+真实参考文献,高效搞定学术写作!
  • 2025年12月江苏徐州别墅庭院设计、屋顶花园设计、公园绿地设计、市政广场设计、生态园区设计服务商权威测评与综合推荐 - 2025年品牌推荐榜
  • 【路径规划】基于RRT快速探索随机树算法在三维环境中寻找从起点到目标点的路径,并对路径进行平滑处理附Matlab代码
  • AgentRun:如何利用 AI Agent 构建现代化的舆情分析解决方案?
  • 【论道】组件封装原则
  • 【商业摄影必读】告别“灰墙战神”!PS 2025 AI 重新定义人像环境合成(附光影融合秘籍)
  • 郑州家装公司五大推荐:优质装修/别墅装修/老房翻新精选,华埔装饰砸无赦承诺引领行业新风尚 - 深度智识库
  • 高精度光学动作捕捉如何为无人机提供飞行姿态与轨迹真值?——以IROS 2025多篇无人机学习与控制研究为例
  • 让回忆“动”起来:手把手教你制作老照片动态视频
  • 基于Spring Boot和Vue.js的房屋出租管理系统设计与实现
  • 基于结构特征与神经网络特征融合的手写汉字评价模型研究
  • 深耕用户体验,「呵汤」年度会员聚会举办在即 - 资讯焦点
  • 2025年亚麻油灌装机厂家实力推荐:大豆油灌装机/导热油灌装机/机油灌装机源头厂家精选 - 品牌推荐官