Nếu bạn chưa nghe về khái niệm này, có thể đọc ở đây http://213.35.113.17:9002/toi-uu-truy-van-pagination-phan-trang-su-dung-spring-boot-java/
Blaze Persistence
Tuy nhiên bạn có thể sử dụng Blaze Persistence để làm điều đó và có thể hoạt động plug-n-play với JPA luôn.
Tạo một CriteriaBuilderFactory
Lấy tập dữ liệu Top-N trên cùng
Để lấy trang đầu tiên, ta sử dụng một query Top-N như sau.
- Bạn có thể tùy chỉnh orderByAsc để căn theo sort by tập dữ liệu cần có
- pageSize quy định số lượng số phần tử cần lấy
- withKeysetExtraction sẽ yêu cầu Blaze Persistence để lưu các thông số để có thể lấy dữ liệu cho query N phần tử tiếp theo
- PagedList implement từ List có sẵn của Java, với một số hàm để bạn có thể extract dữ liệu
Output:
Lấy trang tiếp theo
- Page tiếp theo sẽ sử dụng keysetPage ta đã có trước đó, để có thể thực hiện skip lượng row cần thiết để lấy tập dữ liệu tiếp theo
Thử nghiệm kết quả
- Sử dụng cách tương tự để nhảy sang các trang kế tiếp
Tham khảo: