Phân trang trong java spring dùng jpa

Xin chào các bạn.
Gần đây khi review code mình thấy nhiều bạn viết tính năng phân trang như dưới đây. Khi được hỏi thì nói copy lại từ dự án cũ. Xin mọi người cho ý kiến.

public static Page<?> toPage(List<?> list, Pageable pageable) {
        if (null == pageable || list == null || list.size() == 0) return null;
        int start = (int) pageable.getOffset();
        int end = Math.min((start + pageable.getPageSize()), list.size());
        if (start > list.size())
            return new PageImpl<>(new ArrayList<>(), pageable, list.size());
        return new PageImpl<>(list.subList(start, end), pageable, list.size());
    }
@Override
    public List<PriceBookDTO> findAll() {
        List<PriceBook> entities = repository.findAll();
        return entities == null || entities.size() == 0 ? new ArrayList<>() :
                entities.stream().map(obj ->  mapper.convertEntityToDTO(obj)).collect(Collectors.toList());
    }

Mục đích của topic để anh em chia sẻ những kinh nghiệm về tính năng này. Phân tích để những bạn trẻ, hiểu hơn về code mình đang làm.

Phân trang trên bộ nhớ đây mà, dùng findAll() lấy hết record rồi dùng subList() cắt ra.
Vừa chậm vừa cồng kềnh, trong khi JPA hỗ trợ sẵn phân trang lúc query rồi, tạo một Pageable rồi ném vào query là xong.

4 Likes

đó là khi query thuần tuý từ một bảng, dùng mấy method của jpa với pagable, nhưng chuyện này lại ít khi xảy ra
đối với những case phức tạp hơn, thì không tiện chút nào

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?