news 2026/10/21 19:02:49

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
完整 Oracle 12c 分页 Demo(Spring Boot+MyBatis+PageHelper)

一、核心代码实现

1. pom.xml(依赖配置)

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <!-- 稳定版,适配PageHelper --> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>oracle-page-demo</artifactId> <version>1.0.0</version> <dependencies> <!-- Spring Boot核心 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency> <!-- PageHelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.7</version> </dependency> <!-- Oracle驱动 --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.9.0.0</version> </dependency> <!-- SQL解析 --> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>4.6</version> </dependency> <!-- 测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

2. application.properties(配置文件)

# 服务器端口 server.port=8080 # Oracle数据库配置 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.url=jdbc:oracle:thin:@localhost:1521:ORCL # 替换为你的Oracle地址 spring.datasource.username=your_username # 替换为你的用户名 spring.datasource.password=your_password # 替换为你的密码 # MyBatis配置 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.type-aliases-package=com.example.oraclepage.entity mybatis.configuration.map-underscore-to-camel-case=true # 下划线转驼峰 # PageHelper配置 pagehelper.helper-dialect=oracle12c # 指定自定义的Oracle 12c方言 pagehelper.reasonable=true # 分页合理化(页码越界自动修正) pagehelper.support-methods-arguments=true # 支持Mapper参数传分页参数 pagehelper.params=count=countSql

3. Oracle12cDialect.java(自定义方言)

package com.example.oraclepage.config; import com.github.pagehelper.Page; import com.github.pagehelper.dialect.AbstractHelperDialect; import com.github.pagehelper.page.PageAutoDialect; import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.springframework.stereotype.Component; import java.util.Map; /** * 自定义Oracle 12c分页方言(适配OFFSET ... FETCH语法) */ @Component public class Oracle12cDialect extends AbstractHelperDialect { // 注册方言别名,与配置文件中的pagehelper.helper-dialect对应 static { PageAutoDialect.registerDialectAlias("oracle12c", Oracle12cDialect.class); } /** * 生成Oracle 12c分页SQL(核心方法) * @param sql 原始查询SQL * @param page 分页对象 * @param pageKey 缓存Key * @return 拼接后的分页SQL */ @Override public String getPageSql(String sql, Page page, CacheKey pageKey) { StringBuilder sqlBuilder = new StringBuilder(sql.length() + 60); sqlBuilder.append(sql); // Oracle 12c分页语法:OFFSET 跳过行数 ROWS FETCH NEXT 取行数 ROWS ONLY int offset = page.getStartRow(); // 跳过的行数((页码-1)*每页条数) int limit = page.getPageSize(); // 每页条数 sqlBuilder.append(" OFFSET ").append(offset).append(" ROWS FETCH NEXT ").append(limit).append(" ROWS ONLY"); // 更新缓存Key(用于MyBatis缓存) pageKey.update(offset); pageKey.update(limit); return sqlBuilder.toString(); } /** * 处理分页参数(Oracle 12c直接拼接SQL,无需额外参数处理) */ @Override public Object processPageParameter(MappedStatement ms, Map<String, Object> paramMap, Page page, BoundSql boundSql) { return paramMap; } }

4. User.java(实体类)

package com.example.oraclepage.entity; /** * 测试用用户实体类(需与数据库表字段对应) */ public class User { private Long id; // 用户ID private String userName; // 用户名(对应数据库user_name) private String email; // 邮箱 // Getter & Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } // toString @Override public String toString() { return "User{" + "id=" + id + ", userName='" + userName + '\'' + ", email='" + email + '\'' + '}'; } }

5. UserMapper.java(Mapper 接口)

package com.example.oraclepage.mapper; import com.example.oraclepage.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * 用户Mapper接口 */ @Mapper public interface UserMapper { /** * 查询所有用户(PageHelper自动分页) */ List<User> selectAllUsers(); }

6. UserMapper.xml(Mapper 映射文件)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.oraclepage.mapper.UserMapper"> <!-- 查询所有用户 --> <select id="selectAllUsers" resultType="com.example.oraclepage.entity.User"> SELECT id, user_name, email FROM t_user <!-- 替换为你的实际表名 --> </select> </mapper>

7. UserService.java(业务层)

package com.example.oraclepage.service; import com.example.oraclepage.entity.User; import com.example.oraclepage.mapper.UserMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * 用户业务层 */ @Service public class UserService { @Autowired private UserMapper userMapper; /** * 分页查询用户 * @param pageNum 页码(从1开始) * @param pageSize 每页条数 * @return 分页结果(包含数据+分页信息) */ public PageInfo<User> getUsersByPage(int pageNum, int pageSize) { // 开启分页(核心:PageHelper自动拼接Oracle 12c分页SQL) PageHelper.startPage(pageNum, pageSize); // 执行查询(无需修改SQL,PageHelper自动处理) List<User> userList = userMapper.selectAllUsers(); // 包装为PageInfo(包含总条数、总页数、当前页等信息) return new PageInfo<>(userList); } }

8. OraclePageApplication.java(启动类)

package com.example.oraclepage; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 项目启动类 */ @SpringBootApplication @MapperScan("com.example.oraclepage.mapper") // 扫描Mapper接口 public class OraclePageApplication { public static void main(String[] args) { SpringApplication.run(OraclePageApplication.class, args); } }

9. 测试 Controller(可选)

package com.example.oraclepage.controller; import com.example.oraclepage.entity.User; import com.example.oraclepage.service.UserService; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * 测试接口 */ @RestController public class UserController { @Autowired private UserService userService; /** * 分页查询用户接口 * 访问示例:http://localhost:8080/users?pageNum=1&pageSize=10 */ @GetMapping("/users") public PageInfo<User> getUsers( @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize) { return userService.getUsersByPage(pageNum, pageSize); } }

二、测试

  1. CREATE TABLE t_user ( id NUMBER PRIMARY KEY, user_name VARCHAR2(50), email VARCHAR2(100) ); -- 插入测试数据 INSERT INTO t_user VALUES (1, 'zhangsan', 'zhangsan@test.com'); INSERT INTO t_user VALUES (2, 'lisi', 'lisi@test.com'); INSERT INTO t_user VALUES (3, 'wangwu', 'wangwu@test.com'); COMMIT;
  2. 启动项目:运行OraclePageApplication,访问http://localhost:8080/users?pageNum=1&pageSize=2;
  3. 查看结果:返回的 JSON 包含list(当前页数据)、total(总条数)、pages(总页数)等信息,且底层执行的 SQL 为:
    SELECT id, user_name, email FROM t_user OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY

三、注意事项

  1. 确保 Oracle 版本为 12c 及以上(OFFSET ... FETCH是 12c 新增语法);
  2. 替换配置文件中的数据库地址、用户名、密码为你的实际信息;
  3. 表名 / 字段名需与实体类、Mapper.xml 中的配置一致;
  4. PageHelper 版本建议与 Spring Boot 版本适配(避免依赖冲突)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 9:36:55

计算机毕业设计springboot基于协同过滤算法的旅游推荐系统 SpringBoot 驱动的个性化旅程发现平台:融合协同过滤的智慧推荐引擎 基于用户兴趣聚类的 SpringBoot 旅游行程智能

计算机毕业设计springboot基于协同过滤算法的旅游推荐系统hcgg8585 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 当“说走就走”成为年轻人的口头禅&#xff0c;面对海量却雷…

作者头像 李华
网站建设 2026/10/19 8:34:24

LSTM量化交易策略的环境适应性与入参稳定性评估

功能说明与风险警示 本文实现的LSTM量化交易策略通过时间序列建模捕捉金融数据的非线性特征&#xff0c;核心功能包括&#xff1a;1&#xff09;基于历史价格序列构建特征工程&#xff1b;2&#xff09;采用多层LSTM网络学习时序依赖关系&#xff1b;3&#xff09;输出未来价格…

作者头像 李华
网站建设 2026/10/21 3:38:36

ue python脚本 获取资产

ue 获取资产import unrealactor_name "BP_Bernice"# 获取 Editor Actor Utilities Subsystem subsystem unreal.get_editor_subsystem(unreal.EditorActorSubsystem)# 获取所有关卡 Actor actors subsystem.get_all_level_actors()for a in actors:print(a.get_na…

作者头像 李华
网站建设 2026/10/21 17:31:14

Type Hints:花1小時寫,省18小時除錯的投資回報率分析

Type Hints&#xff1a;花1小時寫&#xff0c;省18小時除錯的投資回報率分析引言&#xff1a;一場效率革命在現代軟體開發中&#xff0c;我們經常面臨一個抉擇&#xff1a;應該花時間寫更嚴謹的程式碼&#xff0c;還是快速實現功能&#xff1f;Type Hints&#xff08;類型提示&…

作者头像 李华
网站建设 2026/10/21 3:36:34

基于大数据的国产跑鞋推荐与可视化分析系统(毕设源码+文档)

课题说明随着全民健身热潮兴起与国产运动品牌崛起&#xff0c;国产跑鞋市场规模持续扩大&#xff0c;但消费者普遍面临品类选择繁杂、适配需求匹配不精准、产品核心信息获取碎片化等问题&#xff0c;同时品牌方存在用户需求洞察不充分、产品优化缺乏数据支撑等痛点&#xff0c;…

作者头像 李华