【问题标题】:SpringData JPA Repository Method Query with a like?Spring Data JPA Repository Method Query 用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。我愿意接受这里的建议。

【问题讨论】:

标签: spring hibernate jpa spring-data


【解决方案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 岁问题。
猜你喜欢
  • 2015-01-11
  • 2020-11-26
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多