Java如何实现分页查询
时间: 2023-07-07 09:38:24 浏览: 82
在Java中实现分页查询一般需要以下几个步骤:
1. 定义分页参数,包括每页显示的记录数和当前页码数。可以使用一个 POJO 类来封装这些参数。
2. 在 DAO 层中,通过 SQL 语句查询总记录数和当前页的记录。SQL 语句中需要使用 LIMIT 子句限制返回的记录数。
3. 根据总记录数和每页显示的记录数计算总页数。
4. 将查询结果和分页信息封装成一个 Page 对象,返回给 Service 层。
以下是一个简单的示例代码:
```
// 定义分页参数
public class PageRequest {
private int pageNum;
private int pageSize;
// getter 和 setter 略
}
// 分页结果封装类
public class Page<T> {
private int pageNum;
private int pageSize;
private int total;
private List<T> content;
// getter 和 setter 略
}
// DAO 层
public interface UserRepository {
List<User> findByPage(int offset, int limit);
int count();
}
public class UserRepositoryImpl implements UserRepository {
@Override
public List<User> findByPage(int offset, int limit) {
// 使用 LIMIT 子句限制返回的记录数
String sql = "SELECT * FROM user LIMIT ?, ?";
return jdbcTemplate.query(sql, new Object[]{offset, limit}, new BeanPropertyRowMapper<>(User.class));
}
@Override
public int count() {
String sql = "SELECT COUNT(*) FROM user";
return jdbcTemplate.queryForObject(sql, Integer.class);
}
}
// Service 层
public interface UserService {
Page<User> findPage(PageRequest pageRequest);
}
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public Page<User> findPage(PageRequest pageRequest) {
int total = userRepository.count();
int offset = (pageRequest.getPageNum() - 1) * pageRequest.getPageSize();
List<User> users = userRepository.findByPage(offset, pageRequest.getPageSize());
return new Page<>(pageRequest.getPageNum(), pageRequest.getPageSize(), total, users);
}
}
// 控制器
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public Page<User> findPage(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
PageRequest pageRequest = new PageRequest(pageNum, pageSize);
return userService.findPage(pageRequest);
}
}
```
在上面的示例代码中,我们定义了一个 PageRequest 类来封装分页参数,一个 Page 类来封装分页结果。在 UserRepositoryImpl 类中,我们通过 LIMIT 子句限制返回的记录数,并使用 count() 方法查询总记录数。在 UserServiceImpl 类中,我们通过 PageRequest 对象计算出偏移量和查询结果,然后将它们封装成一个 Page 对象并返回。在 UserController 类中,我们通过 @RequestParam 注解获取分页参数,然后调用 UserService 的 findPage() 方法进行分页查询。
阅读全文