Spring Data JPA Repository Method Query 用like?

Posted

技术标签:

【中文标题】Spring Data JPA Repository Method Query 用like?【英文标题】:SpringData JPA Repository Method Query with a like? 【发布时间】:2014-08-31 01:20:23 【问题描述】:

在 Spring-data JPA 中,是否可以创建一个本质上是通过 like 搜索的方法查询?

我有以下方法查询

public MakeModel findByModelIgnoreCase(String model);

我真正想要的是一个like 表达式。我只需要创建一个 Criteria 或一个 @Query 注释吗?我要求太多了吗?

   //Stupid example of what I want to be able to do

    public MakeModel findByFuzzyModelIgnoreCase(String model);

真的,我猜它的核心是,我想做一个表格搜索。我在 Spring Data 下使用 Hibernate,所以我想我可以使用一些搜索 api,比如 Hibernate Search。我愿意接受这里的建议。

【问题讨论】:

JPQL 有 LIKE: blogs.oracle.com/JPQL01/entry/how_to_use_like_expression docs.spring.io/spring-data/jpa/docs/1.6.1.RELEASE/reference/… axtavt 这正是我所需要的...... axtavt...这正是我需要的...你应该把它放在答案中...关于搜索 api 的任何反馈? 【参考方案1】:

如果不想手动添加“%”,可以使用以下查询方法:

MakeModel findByModelStartingWithIgnoreCase(String model); //SQL => LIKE 'model%'
MakeModel findByModelEndingWithIgnoreCase(String model); //SQL => LIKE '%model'
MakeModel findByModelContainingIgnoreCase(String model); //SQL => LIKE '%model%'

【讨论】:

1 个小细节,IgnoreCase => ILIKE【参考方案2】:

也支持点赞:

MakeModel findByModelLikeIgnoreCase(String model);

当您调用该方法时,请使用以下内容: 开头加"%"表示严格的开局无所谓, 最后相同,或者您可以使用其中一个,这取决于您想要的。

MakeModel makeModel = findByModelLikeIgnoreCase("%"+model+"%");

如果您的品牌模型是 test 并且要比较的字符串是 "%"+model+"%" 那么:

es is a match , T is a match , test is a match  

要比较的字符串是model+"%"

te is a match , es is not .

【讨论】:

很好的答案!您可能想提及 Containing/Contains 关键字,它们的作用相同,但不需要客户了解特定商店的类似语法。【参考方案3】:

如果你想在一个日期源中添加“%”是类型 Date ,怎么做,像这样 MakeModel findByModelStartingWithIgnoreCase(日期模型);

【讨论】:

恭喜您的第一个答案。你应该考虑更清楚地表达答案,因为很难看出你想说什么。还请检查问题的日期,无需回答已回答的 4 岁问题。

以上是关于Spring Data JPA Repository Method Query 用like?的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-jpa 和 spring-boot-starter-data-jpa 的区别

spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发

spring data jpa怎么和solr整合

spring data jpa问题

Spring Data 系列 Spring+JPA(spring-data-commons)

spring-data-jpa软删除方案