如何在QueryDsl中结合数组操作编写LIKE查询Predicate
实现方案
首先要明确:你当前代码里的eqAny是精确匹配列表中的任意值,而需求是查询字段包含列表中任一词汇的行,所以需要调整逻辑,用contains(或like)结合多条件OR来实现。
代码实现
final var builder = new BooleanBuilder(); List<String> keywords = Arrays.asList("foo", "bar", "baz"); // 遍历关键词列表,为每个关键词添加"包含"的OR条件 keywords.forEach(keyword -> { builder.or(qAccount.accAddress.contains(keyword)); }); Predicate predicate = builder.getValue();
补充说明
- 这里的
qAccount.accAddress是QueryDSL生成的查询路径对象,类型为ArrayPath<String[], String>,对应数据库中varchar类型的address字段。 - 如果需要忽略大小写匹配,可以用
containsIgnoreCase替代contains。 - 若列表为空,建议提前处理,避免生成无效的查询条件。
内容的提问来源于stack exchange,提问作者Sumith
相关产品推荐
相关产品推荐

