目录
1. 背景介绍
2. Maven 依赖(pom.xml)
3. 配置项(application.properties)
4. 核心代码示例
4.1 Controller 层(Java)
4.2 Service 层(Java)
4.3 Mapper 接口(Java)
4.4 Mapper XML (MyBatis)
5. 注意事项小结
6. 运行结果演示
以下是一篇面向“JavaWeb 使用 PageHelper 分页插件注意事项”简单介绍,包含完整可复制的代码示例、依赖提示、运行结果说明及文件名标注。
在 JavaWeb 项目中,数据分页查询是常见需求。PageHelper(基于 MyBatis)可以让我们**“零侵入”**地在代码中实现分页。本文将演示如何快速引入并使用,并提示几个常见注意事项,帮助同学们快速上手。
提示:以下内容为 Maven 配置,标注为 XML 类型,放在项目根目录的
pom.xml
中。
org.mybatis
mybatis
3.5.13
org.mybatis.spring
mybatis-spring
2.0.8
com.github.pagehelper
pagehelper-spring-boot-starter
1.4.6
org.springframework
spring-webmvc
5.3.30
提示:以下为 Spring Boot 环境下的配置,如非 Spring Boot,请在 XML 中配置 PageHelper 插件。
# 文件:src/main/resources/application.properties
# 开启 PageHelper 参数支持
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
helperDialect:根据数据库类型设置,比如 mysql
、oracle
;
reasonable:页码 ≤0 时,查询第一页;页码 大于总页数时,查询最后一页;
supportMethodsArguments:在 Mapper 方法参数上支持分页参数;
params:指定 count 查询别名。
下面以一个“用户列表分页”功能为例,完整给出 Controller → Service → Mapper → XML 四层代码。
// 文件:src/main/java/com/example/controller/UserController.java
package com.example.controller;
import com.example.entity.User;
import com.example.service.UserService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
/**
* GET /users?page=1&size=5
* 返回用户分页数据
*/
@GetMapping
public PageInfo list(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
return userService.getUserPage(page, size);
}
}
// 文件:src/main/java/com/example/service/UserService.java
package com.example.service;
import com.example.entity.User;
import com.github.pagehelper.PageInfo;
import java.util.List;
public interface UserService {
PageInfo getUserPage(int pageNum, int pageSize);
}
// 文件:src/main/java/com/example/service/impl/UserServiceImpl.java
package com.example.service.impl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
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 UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public PageInfo getUserPage(int pageNum, int pageSize) {
// 注意事项①:PageHelper.startPage 必须紧贴在查询方法前
PageHelper.startPage(pageNum, pageSize);
List list = userMapper.selectAll();
// 注意事项②:需要用 PageInfo 包装查询结果
return new PageInfo<>(list);
}
}
// 文件:src/main/java/com/example/mapper/UserMapper.java
package com.example.mapper;
import com.example.entity.User;
import java.util.List;
public interface UserMapper {
List selectAll();
}
PageHelper.startPage 必须与查询紧邻,否则会分页不生效,导致全表查询。
每次分页前都要调用 startPage,同一个线程多次查询时需每次都调用。
使用 PageInfo 包装结果,可获取 total
、pages
、hasNextPage
等属性,便于前端展示。
合理配置 reasonable,避免非法页码造成空数据;必要时自行校验页码范围。
静默模式 vs. 报错模式:默认 silent 模式(非法页码时返回空),可自定义拦截器日志。
假设数据库有 23 条用户记录,访问:
GET http://localhost:8080/users?page=3&size=10
响应 JSON(部分示例)
{
"pageNum": 3,
"pageSize": 10,
"size": 3,
"startRow": 21,
"endRow": 23,
"total": 23,
"pages": 3,
"list": [
{"id":21,"username":"user21","email":"[email protected]"},
{"id":22,"username":"user22","email":"[email protected]"},
{"id":23,"username":"user23","email":"[email protected]"}
],
"hasNextPage": false,
"hasPreviousPage": true
}
标注:以上内容为服务端在控制台打印的完整 JSON,文件名无需另外标注。
以上示例简单明了,包含全部 Java 代码、XML 配置、依赖和注意事项。读者可直接复制到项目中运行并调整 Dialect、Bean 包路径等配置,快速实现分页功能。希望对大家有帮助!