Mybatis的Example进行Oracle分页查询

本文介绍了一种在Example类中增加分页变量并调整查询语句的方法,通过复制原有selectByExample方法并进行修改,实现更高效的分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 首先在生成的Example类中增加分页变量,并且添加get/set方法:
  2. 修改Example查询语句,原有的selectByExample方法不要改,复制一下另外命名:

 

<think>我们正在讨论MyBatis分页插件PageHelper的使用方法。根据引用内容,我们可以总结出以下步骤: 1. 引入依赖(Maven项目) 2. 配置分页插件(在MyBatis配置文件中或Spring Boot配置文件中) 3. 在代码中使用PageHelper.startPage方法启动分页 4. 执行查询 5. 使用PageInfo对结果进行包装 下面我们按照这些步骤详细说明。 ### 1. 引入依赖 在Maven项目的pom.xml中添加PageHelper依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> <!-- 使用最新版本 --> </dependency> ``` ### 2. 配置分页插件 配置方式有两种:在MyBatis的配置文件(如mybatis-config.xml)中配置,或者在Spring Boot的配置文件中配置(如application.yml)。 **MyBatis配置文件方式(mybatis-config.xml)**: ```xml <configuration> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 配置数据库方言,例如mysql --> <property name="helperDialect" value="mysql"/> <!-- 其他配置 --> </plugin> </plugins> </configuration> ``` **Spring Boot配置方式(application.yml)**: ```yaml pagehelper: helper-dialect: mysql # 数据库方言 reasonable: true # 分页合理化 support-methods-arguments: true # 支持方法参数传递分页参数 ``` ### 3. 在代码中使用分页 在需要分页的查询方法前调用`PageHelper.startPage`方法,然后执行查询。注意:`PageHelper.startPage`方法后的第一个查询方法会被分页。 例如: ```java // 在Service层或Controller层 public PageInfo<Emp> getEmpsByPage(int pageNum, int pageSize) { // 开始分页,pageNum: 当前页码,pageSize: 每页显示数量 PageHelper.startPage(pageNum, pageSize); // 紧接着的查询会被分页 List<Emp> list = empDao.selectAll(); // 使用PageInfo包装查询结果,PageInfo包含了分页的详细信息 PageInfo<Emp> pageInfo = new PageInfo<>(list); return pageInfo; } ``` ### 4. PageInfo对象 `PageInfo`对象包含了分页后的各种信息,如当前页、总页数、总记录数、是否有上一页下一页等。常用属性如下: - `pageNum`:当前页码 - `pageSize`:每页数量 - `total`:总记录数 - `pages`:总页数 - `list`:当前页的数据列表 ### 注意事项 - `PageHelper.startPage`方法要紧跟查询语句,中间不能有其他逻辑,否则可能导致分页失败。 - 如果查询结果为空,`PageInfo`对象中的属性也会被正确设置(如总记录数为0)。 - 支持多种数据库,通过配置`helperDialect`指定数据库方言。 ### 示例代码 假设有一个EmpDao接口,其中有一个查询所有员工的方法`selectAll`: ```java public interface EmpDao { List<Emp> selectAll(); } ``` 在Service层实现分页查询: ```java @Service public class EmpService { @Autowired private EmpDao empDao; public PageInfo<Emp> getEmpPage(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<Emp> emps = empDao.selectAll(); return new PageInfo<>(emps); } } ``` 在Controller层调用: ```java @RestController public class EmpController { @Autowired private EmpService empService; @GetMapping("/emps") public PageInfo<Emp> listEmps(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize) { return empService.getEmpPage(pageNum, pageSize); } } ``` 这样,当访问`/emps?pageNum=1&pageSize=10`时,就会返回第一页的10条员工数据,并且包含分页信息。 ### 总结 使用PageHelper实现分页查询的步骤是:引入依赖、配置插件、在查询前调用`PageHelper.startPage`、使用`PageInfo`包装结果。这种方法简单且对原有代码侵入小,是MyBatis分页的常用解决方案[^1][^2][^3]。 §§相关问题§§ 1. PageHelper分页插件支持哪些数据库? 2. 如何配置PageHelper以实现多数据源分页? 3. PageHelper的分页原理是什么? 4. 在使用PageHelper时常见的错误有哪些?如何解决?</think>### MyBatis 分页插件 PageHelper 使用指南 #### 1. **引入依赖** 在 Maven 项目的 `pom.xml` 中添加依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> <!-- 使用最新版本 --> </dependency> ``` #### 2. **配置插件** **Spring Boot 配置(application.yml)**: ```yaml pagehelper: helper-dialect: mysql # 指定数据库类型(mysql/oracle等) reasonable: true # 分页合理化(页码超出范围时自动调整) support-methods-arguments: true # 支持通过方法参数传递分页 params: count=countSql # 优化COUNT查询 ``` **传统 MyBatis 配置(mybatis-config.xml)**: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins> ``` #### 3. **基础分页查询** 在 Service 或 Controller 层实现分页: ```java // 示例:查询第2页,每页10条数据 public PageInfo<Emp> getEmpPage(int pageNum, int pageSize) { // 1. 启动分页 PageHelper.startPage(pageNum, pageSize); // 2. 执行原始查询(无需修改SQL) List<Emp> emps = empDao.selectAll(); // 普通查询方法 // 3. 封装分页结果(包含页码/总条数等元数据) return new PageInfo<>(emps); } ``` #### 4. **前端参数传递** Controller 接收分页参数: ```java @GetMapping("/emps") public PageInfo<Emp> list( @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize ) { return empService.getEmpPage(pageNum, pageSize); } ``` #### 5. **PageInfo 核心属性** 分页结果对象包含: ```java pageInfo.getList(); // 当前页数据列表 pageInfo.getPageNum(); // 当前页码 pageInfo.getPageSize(); // 每页条数 pageInfo.getTotal(); // 总记录数 pageInfo.getPages(); // 总页数 pageInfo.isHasNextPage();// 是否有下一页 ``` #### 6. **高级用法** **参数分页**(方法参数传递): ```java // Dao层接口 List<Emp> selectByCondition( @Param("name") String name, @Param("pageNum") int pageNum, @Param("pageSize") int pageSize ); // Service调用(无需PageHelper.startPage) PageInfo<Emp> page = new PageInfo<>( empDao.selectByCondition("张三", 1, 10) ); ``` **多数据源配置**: ```yaml # 指定不同Mapper使用不同方言 pagehelper: auto-dialect-class: com.example.CustomDialect ``` ### 注意事项 1. `PageHelper.startPage()` 必须紧邻 **查询语句之前**,中间不可插入其他逻辑。 2. 返回的 `PageInfo` 对象可序列化为 JSON 直接返给前端。 3. 复杂关联查询时,确保 `COUNT` 语句性能(可自定义 `countColumn` 优化)[^3]。 > 示例:查询结果包含分页元数据 > ```json > { > "pageNum": 1, > "pageSize": 10, > "total": 85, > "pages": 9, > "list": [ ... ] // 当前页数据 > } > ``` 通过 PageHelper 可显著简化分页开发,避免手动编写 `LIMIT/OFFSET` 和 `COUNT` 查询[^1][^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

化猿和尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值