1. MyBatis-Plus分页查询基础实现
MyBatis-Plus作为MyBatis的增强工具,提供了非常便捷的分页查询功能。我们先来看最基础的分页查询实现方式,这也是日常开发中最常用的场景。
1.1 基础分页查询实现
基础分页查询通常包含以下几个核心步骤:
- 创建分页对象(Page)
- 构建查询条件(QueryWrapper/LambdaQueryWrapper)
- 执行分页查询
- 返回分页结果
java复制@Override
public PageResult<Employee> selectPage(Integer pageNum, Integer pageSize, String name) {
// 1. 创建分页对象
Page<Employee> page = new Page<>(pageNum, pageSize);
// 2. 创建条件构造器
LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
// 3. 添加查询条件
if (StringUtils.isNotBlank(name)) {
wrapper.like(Employee::getName, name);
}
// 4. 添加排序
wrapper.orderByDesc(Employee::getId);
// 5. 执行分页查询
IPage<Employee> result = employeeMapper.selectPage(page, wrapper);
// 6. 构建分页结果
return new PageResult<>(result.getRecords(), result.getTotal());
}
提示:LambdaQueryWrapper相比普通的QueryWrapper,使用Lambda表达式引用字段,可以避免硬编码字段名,减少因字段名变更导致的错误。
1.2 核心组件解析
Page对象:封装分页参数和结果
pageNum:当前页码pageSize:每页记录数records:查询结果列表total:总记录数
LambdaQueryWrapper:条件构造器
like:模糊查询eq:等于between:范围查询orderByDesc:降序排序
IPage接口:分页查询结果
- 继承Page对象,提供分页数据访问方法
1.3 注意事项与常见问题
- 页码处理:前端传递的页码通常从1开始,但需要确保pageNum和pageSize不为null且大于0
- 性能考虑:当数据量很大时,count查询可能很慢,可以考虑使用
page.setSearchCount(false)禁用count查询 - 排序字段:建议为排序字段建立索引,提高查询效率
- N+1问题:避免在循环中执行查询,应该使用批量查询或关联查询
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 返回自定义VO的分页查询
在实际项目中,我们经常需要返回与数据库实体不同的视图对象
