使用了pagehelper
时间: 2025-08-05 09:42:58 浏览: 4
### 3.1 分页与条件查询的整合实现
在使用 PageHelper 进行分页查询时,若查询条件仅包括姓名、性别和入职日期,可以通过在 Service 层设置分页参数,并在 Mapper 中定义相应的动态 SQL 来实现条件筛选[^3]。
在 Service 层,通过调用 `PageHelper.startPage(page, pageSize)` 设置分页参数,并调用 Mapper 的查询方法执行带条件的查询。查询结果会自动封装为 `Page<Emp>` 对象,从中可以获取总记录数和当前页的数据列表[^1]。
以下是 Service 层的示例代码:
```java
@Override
public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
PageHelper.startPage(page, pageSize);
List<Emp> empList = empMapper.list(name, gender, begin, end);
Page<Emp> p = (Page<Emp>) empList;
return new PageBean(p.getTotal(), p.getResult());
}
```
该方法中,`empMapper.list()` 方法用于执行带条件的查询,并返回分页后的结果。
### 3.2 Mapper 层的动态 SQL 实现
在 Mapper 层,通过 MyBatis 的动态 SQL 功能,可以根据传入的参数动态拼接查询条件。使用 `<if>` 标签判断参数是否为空,仅在参数存在时添加对应的条件,从而避免无效的 `AND` 或 `OR` 语法错误。
以下是一个基于 MyBatis XML 配置的动态 SQL 示例:
```xml
<select id="list" resultType="Emp">
SELECT *
FROM emp
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="gender != null">
AND gender = #{gender}
</if>
<if test="begin != null and end != null">
AND entry_date BETWEEN #{begin} AND #{end}
</if>
</where>
</select>
```
该 SQL 语句中:
- `name LIKE CONCAT('%', #{name}, '%')` 支持模糊查询;
- `gender = #{gender}` 用于筛选性别;
- `entry_date BETWEEN #{begin} AND #{end}` 用于筛选入职日期范围;
- `<where>` 标签自动处理 `WHERE` 关键字和条件拼接,避免语法错误[^3]。
### 3.3 分页参数的默认值设置
在实际应用中,若未指定 `page` 和 `pageSize` 参数,可以设置默认值以确保分页功能正常运行。例如,默认值可设为 `page=1`、`pageSize=10`,从而在未传参时仍能正确执行分页查询[^2]。
在 Controller 层接收请求参数时,可通过如下方式设置默认值:
```java
@GetMapping("/employees")
public ResponseEntity<PageBean> getEmployees(
@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "gender", required = false) Short gender,
@RequestParam(name = "begin", required = false) LocalDate begin,
@RequestParam(name = "end", required = false) LocalDate end) {
PageBean result = employeeService.page(page, pageSize, name, gender, begin, end);
return ResponseEntity.ok(result);
}
```
该方法中,`@RequestParam` 注解用于接收 HTTP 请求参数,并通过 `defaultValue` 设置默认值,确保未传参时仍能执行分页查询[^2]。
### 3.4 查询条件的组合与执行流程
在执行查询时,PageHelper 会自动拦截 SQL 查询,并在其基础上追加分页语句。例如,原始 SQL 为:
```sql
SELECT * FROM emp WHERE name LIKE '%张%' AND gender = 1
```
PageHelper 会将其转换为:
```sql
SELECT * FROM emp WHERE name LIKE '%张%' AND gender = 1 LIMIT 10 OFFSET 0
```
同时,PageHelper 会执行对应的 `COUNT` 查询以获取总记录数:
```sql
SELECT COUNT(*) FROM emp WHERE name LIKE '%张%' AND gender = 1
```
最终,查询结果将被封装为 `Page<Emp>` 对象,包含总记录数和当前页的数据列表[^1]。
---
阅读全文
相关推荐



















