在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且&lt; 20的过滤器数据怎么做?但查询我想要动态生成
答案 0 :(得分:0)
您可以参考以下代码:
@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));
}
}