mybatis的扩展插件PageHelper 分页组件详解(含完整代码示例)

mybatis的扩展插件PageHelper 分页组件详解(含完整代码示例)

mybatis的扩展插件PageHelper 分页组件详解(含完整代码示例)

1. PageHelper 功能与核心概念

PageHelper 是 MyBatis 的分页插件,用于简化分页查询。其核心功能包括:

简单分页:通过 PageHelper.startPage() 指定页码和每页数量。复杂查询分页:支持嵌套查询、多条件查询的分页。数据库方言支持:自动适配 MySQL、Oracle 等数据库的分页语法。

2. 完整代码示例

步骤1:添加依赖

在 pom.xml 中引入 PageHelper 的 Spring Boot Starter:

com.github.pagehelper

pagehelper-spring-boot-starter

1.4.5

步骤2:配置分页插件

通过配置类或 application.yml 启用插件(Spring Boot 自动配置,无需额外代码)。

# application.yml(可选配置)

pagehelper:

helper-dialect: mysql # 指定数据库方言

reasonable: true # 合理分页(页码小于1时返回第一页,大于最大页时返回最后一页)

步骤3:实体类与 Mapper

// User.java(实体类)

public class User {

private Long id;

private String name;

private Integer age;

// Getters and Setters

}

// UserMapper.java(MyBatis Mapper 接口)

public interface UserMapper extends BaseMapper {

// 或直接使用 XML 定义 SQL

}

步骤4:Service 层实现分页

// UserServiceImpl.java

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserMapper userMapper;

/**

* 分页查询用户列表

* @param pageNum 当前页码

* @param pageSize 每页数量

* @return 分页结果

*/

public PageInfo listUsers(int pageNum, int pageSize) {

// 开启分页,设置当前页和每页数量

PageHelper.startPage(pageNum, pageSize);

// 执行查询(可添加复杂条件)

List users = userMapper.selectList(null); // 或自定义查询方法

// 封装分页结果

return new PageInfo<>(users);

}

}

步骤5:Controller 层处理请求

// UserController.java

@RestController

public class UserController {

@Autowired

private UserService userService;

@GetMapping("/users")

public ResponseEntity> getUsers(

@RequestParam(defaultValue = "1") int pageNum,

@RequestParam(defaultValue = "10") int pageSize

) {

PageInfo pageInfo = userService.listUsers(pageNum, pageSize);

return ResponseEntity.ok(pageInfo);

}

}

步骤6:运行与结果示例

访问 http://localhost:8080/users?pageNum=1&pageSize=5,返回结果类似:

{

"list": [

{"id": 1, "name": "张三", "age": 25},

{"id": 2, "name": "李四", "age": 30}

],

"pageNum": 1,

"pageSize": 5,

"total": 100,

"pages": 20

}

3. 关键代码与注释详解

分页核心代码

// 开启分页

PageHelper.startPage(pageNum, pageSize);

// 执行查询(可添加条件)

List users = userMapper.selectList(null);

// 封装分页信息

PageInfo pageInfo = new PageInfo<>(users);

PageHelper.startPage():

参数 pageNum 和 pageSize 分别表示当前页和每页数量。支持链式调用(如 PageHelper.startPage(1, 10).setOrderBy("age desc"))。

PageInfo:

包含总记录数(total)、总页数(pages)、当前页数据(list)等信息。

复杂查询示例

// 支持多条件查询

public PageInfo searchUsers(int pageNum, int pageSize, String keyword) {

PageHelper.startPage(pageNum, pageSize);

// 自定义查询方法

List users = userMapper.findByKeyword(keyword);

return new PageInfo<>(users);

}

4. 总结表格

组件名称功能核心类适用场景关键代码点PageHelper分页插件(支持复杂查询)PageHelper, PageInfo需要分页的复杂查询(如多条件、嵌套查询)PageHelper.startPage(), PageInfo配置方式Spring Boot 自动配置或自定义配置application.yml所有分页场景配置 helper-dialect 和 reasonable数据库适配自动适配 MySQL、Oracle 等内置方言支持多数据库环境无需手动修改 SQL 分页语法

5. 关键实践建议

分页参数校验:

避免 pageNum 或 pageSize 为负数,可通过 @Min(1) 等注解校验。

性能优化:

对大数据量分页查询,建议结合数据库索引或缓存。

分页逻辑复用:

将分页逻辑封装到工具类或基类中,减少重复代码。

通过 PageHelper,开发者可以快速实现分页功能,尤其适合需要灵活处理复杂查询的企业级应用。

相关推荐

兰博基尼汽车排行榜

兰博基尼汽车排行榜

📅 10-05 👁️ 8923
瑞士门将人选----除了索默科贝尔还有谁?
呔,妖怪,别跑!!谁的台词