java如何查分页
分页查询的实现方法
在Java中实现分页查询通常涉及数据库操作和前端交互。以下是几种常见的实现方式:
使用SQL的LIMIT和OFFSET
MySQL等数据库支持LIMIT和OFFSET语法:
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);
}
内存分页处理
当数据量不大时,可以在内存中进行分页:
public List<User> getPage(List<User> allUsers, int pageNum, int pageSize) {
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, allUsers.size());
return allUsers.subList(fromIndex, toIndex);
}
分页结果封装
通常需要返回包含分页信息的对象:
public class PageResult<T> {
private int pageNum;
private int pageSize;
private long total;
private List<T> data;
// getters and setters
}
前端分页参数传递
前端通常通过URL参数传递分页信息:
/api/users?page=2&size=10
后端控制器接收参数:
@GetMapping("/users")
public PageResult<User> getUsers(@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
return userService.getUsersByPage(page, size);
}
性能优化建议
对于大数据量分页,避免使用OFFSET方式,改用基于索引的条件查询:

SELECT * FROM table_name WHERE id > last_id ORDER BY id LIMIT pageSize






