Java中分頁查詢MongoDB數據


  在Java中操作MongoDB時會遇到分頁查詢數據的情況,此時我們可以按如下步驟來實現:

  1、創建一個分頁類

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public class MongoDbPageable implements Pageable {
    /**分頁碼*/
    private int pageNumber = 1;
    /**每頁大小*/
    private int pageSize = 10;
    /**排序*/
    private Sort sort;

    @Override
    public int getPageNumber() {
        return pageNumber;
    }

    public void setCurrentPage(int pageNumber) {
        this.pageNumber = pageNumber;
    }

    @Override
    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    @Override
    public Sort getSort() {
        return sort;
    }

    public void setSort(Sort sort) {
        this.sort = sort;
    }

    @Override
    public long getOffset() {
        return (pageNumber - 1) * pageSize;
    }

    @Override
    public Pageable first() {
        return PageRequest.of(0, pageSize, sort);
    }

    @Override
    public boolean hasPrevious() {
        return false;
    }

    @Override
    public Pageable next() {
        return PageRequest.of(pageNumber + 1, pageSize, sort);
    }

    @Override
    public Pageable previousOrFirst() {
        return pageNumber == 0 ? this : PageRequest.of(pageNumber - 1, pageSize, sort);
    }
}

  2、分頁類的實踐

private List<Object> find(int pageNumber, int pageSize,  Sort.Direction direction){
         MongoDbPageable pageable = new MongoDbPageable();
         pageable.setCurrentPage(pageNumber);
         pageable.setPageSize(pageSize);
         // direction: Sort.Direction.DESC或者Sort.Direction.ASC
         Sort sort = new Sort(direction, "_id");
         pageable.setSort(sort);
         Query query = new Query();
         query.with(pageable);
         return mongoTemplate.find(query, Object.class, collectionName);
     }

  說明:分頁類具有排序的功能,實踐中是按照ObjectId(_id)進行降序排列的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM