我正在尝试学习QueryDSL,以便从Postgres返回单个搜索词的结果:
@GetMapping("/product/contains/{matchingWords}")
public List<ProductModel> findByTitleContaining(@PathVariable String matchingWords) {
QProductModel product = QProductModel.productModel;
JPAQuery<?> query = new JPAQuery<>(em);
List<ProductModel> products = query.select(product)
.from(product)
.where(product.title.toLowerCase()
.contains(matchingWords.toLowerCase()))
.fetch();
return products;
}
但是我也想搜索任意数量的搜索词,例如,这是我的搜索词列表除以加号:
String[] params = matchingWords.split("[+]");
我如何使用QueryDSL或任何Java / Spring查询框架动态创建contains(params [0])AND / OR contains(params [1] AND / OR ... contains(params [n])] >> ?我看到QueryDSL具有谓词系统,但我仍然不了解如何基于同一列中可变数量的参数搜索来动态创建查询。
我正在尝试学习QueryDSL,以便从Postgres返回单个搜索词的结果:@GetMapping(“ / product / contains / {matchingWords}”)public List QProductModel product = QProductModel.productModel;
JPAQuery<?> query = new JPAQuery<>(//entity manager goes here//);
// example list of search parameters separated by +
String[] params = matchingWords.split("[+]");
BooleanBuilder builder = new BooleanBuilder();
for(String param : params) {
builder.or(product.title.containsIgnoreCase(param));
}
然后您可以像这样将它们放在一起:
List<ProductModel> products = query.select(product)
.from(product)
.where(builder)
.fetch();
return products;