【发布时间】:2020-05-04 17:42:31
【问题描述】:
我正在尝试学习 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 动态创建 contains(params[0]) AND/OR contains(params[1] AND/OR ... contains(params[n]) /Spring查询框架?我看到QueryDSL有一个谓词系统,但是我还是不明白如何根据在同一列中搜索的可变数量的参数动态创建查询。
【问题讨论】: