自定义查询与可页面。 Spring Data MongoDB(1.10.9)

时间:2018-02-07 07:43:44

标签: spring-data-jpa spring-data-mongodb

我创建了一个自定义存储库:

//我的存储库:

@SuppressWarnings("unused")
@Repository
public interface PrlRepository extends MongoRepository<Prl, String>, PrlRepositoryCustom {

//我的界面:

public interface PrlRepositoryCustom {

List<Prl> find(FilterPrlDTO filterPrlDTO);

}

//我的实施

@Override
public List<Prl> find(FilterPrlDTO filterPrlDTO) {
    List<Criteria> andCriteria = new ArrayList<>();

    if (filterPrlDTO.getInicioCaduca() != null) {
        andCriteria.add(Criteria.where("caducidad").gte(filterPrlDTO.getInicioCaduca()));
    }
    if (filterPrlDTO.getFinCaduca() != null) {
        andCriteria.add(Criteria.where("caducidad").lte(filterPrlDTO.getFinCaduca()));
    }
    if (filterPrlDTO.getActivo() != null) {
        andCriteria.add(Criteria.where("activo").is(filterPrlDTO.getActivo()));
    }

    Criteria orCriteria = new Criteria().andOperator(andCriteria.toArray(new Criteria[andCriteria.size()]));
    return mongoOperations.find(new Query().addCriteria(orCriteria), Prl.class);
}

它工作正常,但我需要它是可分页的。

有人可以帮我解决这个问题吗?我一直在寻找论坛和文档,但我没有看到任何我可以提供的服务

非常感谢。

2 个答案:

答案 0 :(得分:1)

MongoRepository实际上实现了PagingAndSortingRepository,它允许您实现分页。您可以将Pageable请求与Query类一起传递,下面是一个如何操作的示例,

Pageable pageable = new PageRequest(pageNumber, dataSize);
Query query = new Query(); 

public Page<T> findAll(Query query, Pageable pageable) {
    Long count = count(); //Issue a count query here for the collection
    List<T> list = findAll(query.with(pageable));
    return new PageImpl<T>(list, pageable, count);
}

有关更多信息和示例,请点击此处https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepository.java#L221

答案 1 :(得分:0)

使用大型过滤器进行搜索的结构,这些过滤器将根据搜索参数输入标准,并且结果将被分页:

public Page<AccionOportunidad> filtro(Pageable pageable) {

    Query query = new Query();

    // criterias 
    query.addCriteria(Criteria.where("id").in("xxx"));

    query.with(pageable);
    List<AccionOportunidad> list = mongoOperations.find(query, AccionOportunidad.class);

    return PageableExecutionUtils.getPage(list, pageable,
            () -> mongoOperations.count(query, AccionOportunidad.class));

}