如何分页 java
分页实现方法
使用数据库分页查询
在SQL查询中使用LIMIT和OFFSET进行分页。MySQL示例:
SELECT * FROM table_name LIMIT 10 OFFSET 20; -- 每页10条,第3页(偏移20条)
JPA/Hibernate实现:
Pageable pageable = PageRequest.of(pageNumber, pageSize);
Page<Entity> pageResult = repository.findAll(pageable);
MyBatis实现:

<select id="selectByPage" resultType="Entity">
SELECT * FROM table_name LIMIT #{offset}, #{pageSize}
</select>
内存分页处理
当数据已加载到内存时,使用Java集合API进行分页:
List<Data> allData = getDataList();
int total = allData.size();
List<Data> pageData = allData.stream()
.skip((page-1)*pageSize)
.limit(pageSize)
.collect(Collectors.toList());
分页结果封装
创建通用分页响应对象:

public class PageResult<T> {
private int currentPage;
private int pageSize;
private long total;
private List<T> data;
// getters/setters
}
// 使用示例
PageResult<Entity> result = new PageResult<>();
result.setCurrentPage(pageable.getPageNumber());
result.setPageSize(pageable.getPageSize());
result.setTotal(page.getTotalElements());
result.setData(page.getContent());
前端交互参数
典型的分页请求参数:
page: 当前页码(从1开始)size: 每页记录数sort: 排序字段及方向(如name,asc)
Spring Boot控制器示例:
@GetMapping("/items")
public PageResult<Item> getItems(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
Pageable pageable = PageRequest.of(page-1, size);
Page<Item> pageData = itemService.findAll(pageable);
return new PageResult<>(pageData);
}
性能优化建议
大数据量时避免使用OFFSET,改用基于键的分页:
SELECT * FROM table WHERE id > last_seen_id ORDER BY id LIMIT 10
考虑使用缓存机制存储热点数据的分页结果,注意分页参数变化时的缓存策略。






