在Spring Data JPA中,我们有规范,可以使用分页和规范排序。
public interface JpaSpecificationExecutor<T> {
T findOne(Specification<T> var1);
List<T> findAll(Specification<T> var1);
Page<T> findAll(Specification<T> var1, Pageable var2);
List<T> findAll(Specification<T> var1, Sort var2);
long count(Specification<T> var1);
}
但是在MongoRepository中,没有办法使用这样的功能。我尝试使用QueryByExampleExecutor,但它非常有限示例我想要过滤年份为>5 和 <20 的数据,该怎么做?但是我想要动态生成的查询
你可以参考下面的代码:
@Repository
public class DataRepository {`enter code here`
@Autowired
MongoTemplate mongoTemplate;
public Page<Data> filterData(SearchDTO searchDTO){
List<Data> list = null;
Integer offset = Optional.ofNullable(searchDTO.getOffset()).orElse(0);
Integer limit = Optional.ofNullable(searchDTO.getLimit()).orElse(10);
int page = offset / limit;
Pageable pageable = PageRequest.of(page, limit);
Query query = new Query();
/** your filter condition */
// if (!StringUtils.isEmpty(searchDTO.getName())) {
// query.addCriteria(Criteria.where("name").is(searchDTO.getName()));
// }
query.with(pageable);
list = mongoTemplate.find(query, Data.class);
return PageableExecutionUtils.getPage(list, pageable,
()-> mongoTemplate.count(query, Data.class));
}
}