我正在尝试编写一个查询,该查询输出(限制)关键字匹配量最高的前10条记录。我的SQL查询如下:
SELECT *
FROM wine
WHERE
description LIKE '%dry%'
OR description LIKE '%depth%'
OR description LIKE '%strong%'
OR description LIKE '%spicy%'
ORDER BY
IF(description LIKE '%dry%',1,0)+
IF(description LIKE '%depth%',1,0)+
IF(description LIKE '%strong%',1,0)+
IF(description LIKE '%spicy%',1,0)
DESC LIMIT 10;
此查询的工作方式是查找描述与关键字(干燥,深度,浓烈,辛辣)匹配的前10条记录,然后按这些单词的出现次数对其进行排序。
我正在尝试编写等效的JPA查询,但相对来说还比较陌生。最好在@Query
中使用WineRepository
参数,还是应该在我的WineService
文件中用Java对这种逻辑进行硬编码?
答案 0 :(得分:0)
Pageable
是您要寻找的。如果要将@Query
批注与设置最大结果结合在一起,
public interface WineRepository extends PagingAndSortingRepository<Wine,Long> {
@Query("select * from wine where ...")
List<Wine> findAllWinesWhereKeywordLikes(Pageable pageable);
default List<Wine> findTop10WinesWhereKeywordLikes() {
return findAllWinesWhereKeywordLikes(new PageRequest(0,10));
}
}
在WineRepository中使用@Query参数是最好的选择 在这里还是应该在我的WineService中使用Java对这种逻辑进行硬编码 文件?
事实上,最好在服务中创建一个获取关键字列表的方法,然后在存储库中使用这些关键字进行搜索。因为也许以后您需要用更多的关键词搜索(干,深,浓,辣),并且您可以在任何需要的地方重复使用服务方法。