2015-03-13 25 views

risposta

5

MongoTemplate non ha metodi per restituire Page. I metodi find() restituiscono un ordinario List.

with(new PageRequests(page, size) viene utilizzato internamente per regolare skip e limit con una query MongoDB (preceduto da una query conteggio credo)

Page può essere utilizzato in combinazione con MongoDB repositories che è un caso specializzato di archivi di dati di primavera.

Pertanto, sarà necessario utilizzare Page findAll(Pageable pageable) per i risultati impaginati (effettivamente ereditati da PagingAndSortingRepository).

4

È vero che lo MongoTemplate non ha findXXX con Pagabili.

Ma per questo è possibile utilizzare lo Spring Repository PageableExecutionUtils.

Nel tuo esempio sarebbe simile a questa:

Pageable pageable = new PageRequests(page, size); 
Query query = new Query().with(pageable); 
List<XXX> list = mongoTemplate.find(query, XXX.class); 
return PageableExecutionUtils.getPage(
         list, 
         pageable, 
         () -> mongoTemplate.count(query, XXX.class)); 

Come nell'originale Data Repository Primavera, il PageableExecutionUtils farà una richiesta di conteggio e avvolgerlo in un bel Page per voi.

Here si vede che la primavera fa lo stesso.

+0

e dov'è la classe PageableExecutionUtils? –

+0

Da Spring Data comuni: https://github.com/spring-projects/spring-data-commons/blob/master/src/main/java/org/springframework/data/repository/support/PageableExecutionUtils.java – d0x

+0

Ok, Grazie. Ho usato una versione precedente di primavera. –

0

In base alla risposta di d0x e guardando lo spring code. Sto usando questa variante che funziona dalla dipendenza spring-boot-starter-data-mongodb senza la necessità di aggiungere i dati primaverili.

@Autowired 
private MongoOperations mongoOperations; 

@Override 
public Page<YourObjectType> searchCustom(Pageable pageable) { 
    Query query = new Query().with(pageable); 
    // Build your query here 

    List<YourObjectType> list = mongoOperations.find(query, YourObjectType.class); 
    long count = mongoOperations.count(query, YourObjectType.class); 
    Page<YourObjectType> resultPage = new PageImpl<YourObjectType>(list , pageable, count); 
    return resultPage; 
}