ho una query con paginabile:Impaginazione con mongoTemplate
Query query = new Query().with(new PageRequests(page, size))
Come posso eseguirlo con MongoTemplate? Non vedo un singolo metodo che restituisce Page<T>
.
ho una query con paginabile:Impaginazione con mongoTemplate
Query query = new Query().with(new PageRequests(page, size))
Come posso eseguirlo con MongoTemplate? Non vedo un singolo metodo che restituisce Page<T>
.
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
).
È 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.
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;
}
e dov'è la classe PageableExecutionUtils? –
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
Ok, Grazie. Ho usato una versione precedente di primavera. –