java如何实现分页
分页实现方法
在Java中实现分页功能通常涉及数据库查询和前端展示的配合。以下是几种常见的实现方式:
使用SQL的LIMIT和OFFSET
MySQL等数据库支持LIMIT和OFFSET关键字,可直接在SQL中实现分页:
SELECT * FROM table_name LIMIT pageSize OFFSET (pageNum - 1) * pageSize
对应的Java代码示例:
public List<User> getUsersByPage(int pageNum, int pageSize) {
String sql = "SELECT * FROM users LIMIT ? OFFSET ?";
int offset = (pageNum - 1) * pageSize;
return jdbcTemplate.query(sql, new Object[]{pageSize, offset}, new UserRowMapper());
}
使用MyBatis分页插件
MyBatis可通过PageHelper等插件简化分页:
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(users);
Spring Data JPA分页
Spring Data JPA内置分页支持:
public Page<User> getUsersByPage(int pageNum, int pageSize) {
Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
return userRepository.findAll(pageable);
}
内存分页处理
当数据已加载到内存时,可使用Java 8 Stream API进行分页:
public List<User> getPage(List<User> allUsers, int pageNum, int pageSize) {
return allUsers.stream()
.skip((pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
}
分页参数传递
典型的分页参数包含:
- 当前页码(pageNum/pageNo)
- 每页条数(pageSize)
- 总记录数(total)
- 总页数(totalPages)
前端可通过GET请求传递参数:
/api/users?page=1&size=10
分页结果返回
建议封装统一的分页响应对象:
public class PageResult<T> {
private int pageNum;
private int pageSize;
private long total;
private List<T> data;
// getters/setters
}
性能优化建议
- 避免使用
SELECT *,只查询必要字段 - 对排序字段建立索引
- 大数据量时考虑使用游标分页代替传统分页
- 缓存热点查询结果







