我必须在Spring Boot 时创建过滤器数据。从前端,我发送一个包含每个类别的选定id的列表。我需要返回基于此列表的项目。我可以这样做
服务项目:
public List<ProductModel> getProductFilter(Integer[] categories) {
int size = categories.length;
if(size == 1){
return productRepository.getProductFilteredByOneCategory(Long.valueOf(categories[0]));
}else {
return productRepository.getProductFilteredByTwoCategory(Long.valueOf(categories[0]),Long.valueOf(categories[1]));
}
}
}
储存库:
@Query("SELECT c FROM ProductModel c WHERE c.categoryModel.id = :Category_id")
List<ProductModel> getProductFilteredByOneCategory(Long Category_id);
@Query("SELECT c FROM ProductModel c WHERE c.categoryModel.id = :Category_idOne OR c.categoryModel.id = :Category_idTwo")
List<ProductModel> getProductFilteredByTwoCategory(Long Category_idOne, Long Category_idTwo);
但是如果有50个这样的类别,那就没用了,有没有人能告诉我如何让它变得更好?有什么方法可以从列表中生成查询?
2条答案
按热度按时间gcuhipw91#
您可以使用
in
而不是使用多个or
操作,如下所示。它选择与列表中任何categoryModel id匹配的所有productModel。to94eoyn2#
正如@YJR所说,
IN
子句是解决方案,但是您还应该考虑声明如下所示的查询方法,它不需要编写JPQL。