如何分页java
分页的实现方法
在Java中实现分页功能可以通过多种方式,以下是几种常见的方法:
使用数据库查询的分页
大多数数据库支持分页查询语法,例如MySQL的LIMIT和OFFSET,Oracle的ROWNUM等。以下是一个使用MySQL的例子:

public List<User> getUsers(int pageNumber, int pageSize) {
int offset = (pageNumber - 1) * pageSize;
String sql = "SELECT * FROM users LIMIT ? OFFSET ?";
try (Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, pageSize);
stmt.setInt(2, offset);
ResultSet rs = stmt.executeQuery();
List<User> users = new ArrayList<>();
while (rs.next()) {
users.add(new User(rs.getInt("id"), rs.getString("name")));
}
return users;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
使用Spring Data JPA的分页
Spring Data JPA提供了内置的分页支持,可以简化分页实现:
public Page<User> getUsers(Pageable pageable) {
return userRepository.findAll(pageable);
}
// 调用示例
Pageable pageable = PageRequest.of(pageNumber, pageSize);
Page<User> users = userService.getUsers(pageable);
使用内存分页
如果数据已经在内存中,可以使用Java集合的subList方法实现分页:

public List<User> getPage(List<User> allUsers, int pageNumber, int pageSize) {
int start = (pageNumber - 1) * pageSize;
int end = Math.min(start + pageSize, allUsers.size());
if (start > allUsers.size()) {
return Collections.emptyList();
}
return allUsers.subList(start, end);
}
分页参数的封装
可以创建一个分页结果对象来封装分页数据:
public class PageResult<T> {
private List<T> data;
private int totalPages;
private long totalElements;
private int currentPage;
private int pageSize;
// 构造函数、getter和setter省略
}
public PageResult<User> getUsers(int pageNumber, int pageSize) {
List<User> allUsers = userRepository.findAll();
int total = allUsers.size();
List<User> pageData = getPage(allUsers, pageNumber, pageSize);
int totalPages = (int) Math.ceil((double) total / pageSize);
return new PageResult<>(pageData, totalPages, total, pageNumber, pageSize);
}
前端分页交互
通常前端会传递当前页码和每页大小,后端返回分页数据和总页数等信息:
@GetMapping("/users")
public ResponseEntity<PageResult<User>> getUsers(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
PageResult<User> result = userService.getUsers(page, size);
return ResponseEntity.ok(result);
}
以上方法可以根据具体需求和技术栈选择适合的实现方式。数据库分页适合大数据量场景,内存分页适合小数据量或已缓存数据的场景。Spring Data JPA提供了更高级的分页抽象,适合Spring项目。






