如何基于搜索文本集合进行查询

时间:2019-04-12 07:14:27

标签: spring-data-jpa jpql

我有一个搜索功能,可以处理多个搜索文本。现在,我想在数据库中查询至少包含搜索文本之一的项目。

对于一种搜索文字,我使用以下内容:

import org.springframework.data.jpa.repository.Query;
@Query("SELECT m FROM Material m WHERE m.productName LIKE %:searchText%")

对于搜索文本的集合,我尝试过:

@Query("SELECT m FROM Material m WHERE m.productName IN (:searchTexts)")

我面临的问题是,现在只有确切的productName匹配查询。但是我也在寻找部分比赛。像这样:

@Query("SELECT m FROM Material m WHERE m.productName IN (%:searchTexts%)")

可以使用JPQL还是必须使用QueryDSL?

1 个答案:

答案 0 :(得分:0)

在阅读了可能的重复和许多其他线程之后,我遇到了MySQL的“ RLIKE”功能。 首先,这是一个MySQL函数,据我所知,它不是标准JPQL或HQL的一部分。为了能够使用它,我创建了一个自定义的MySQLDialect:

@Query("SELECT m FROM Material m WHERE function('REGEX_LIKE', m.productName, :searchTexts) = 1 "
List<Material> findByProductName(@Param("searchTexts") String searchTexts);

这是@Query:

List<String> searchTexts = Arrays.asList("abc", "xyz");
String joinedSearchTexts = String.join("|", searchTexts);
List<Material> searchResult = findByProductName(joinedSearchTexts);

作为参数,可以使用由管道连接的搜索文本字符串。

a