SpringData JPA Repository方法查询有哪些?

chr*_*din 16 spring hibernate jpa spring-data

在Spring-data JPA中,无论如何都要创建一个方法查询,实际上是通过像?

我有以下方法查询

public MakeModel findByModelIgnoreCase(String model);
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一个表达方式.我是否需要创建Criteria或@Query注释?我问得太多了吗?

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

    public MakeModel findByFuzzyModelIgnoreCase(String model);
Run Code Online (Sandbox Code Playgroud)

真的,我猜它的核心,我想做一个表搜索.我在Spring Data下面使用了Hibernate,所以我想我可以使用像Hibernate Search这样的搜索api.我愿意接受这里的建议.

UUH*_*IVS 27

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

MakeModel findByModelStartingWithIgnoreCase(String model); //SQL => LIKE 'model%'
MakeModel findByModelEndingWithIgnoreCase(String model); //SQL => LIKE '%model'
MakeModel findByModelContainingIgnoreCase(String model); //SQL => LIKE '%model%'
Run Code Online (Sandbox Code Playgroud)


Raf*_*LDI 21

喜欢也支持:

MakeModel findByModelLikeIgnoreCase(String model);
Run Code Online (Sandbox Code Playgroud)

当您调用该方法时,请使用以下内容:"%"在开始时添加以表示严格的开始匹配无关紧要,最后相同,或者您可以使用其中一个,这取决于您想要的.

MakeModel makeModel = findByModelLikeIgnoreCase("%"+model+"%");
Run Code Online (Sandbox Code Playgroud)

如果你的make模型是test和要比较的字符串是"%"+model+"%":

es is a match , T is a match , test is a match  
Run Code Online (Sandbox Code Playgroud)

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

te is a match , es is not .
Run Code Online (Sandbox Code Playgroud)

  • 很棒的答案!您可能想要提及"Containing"/"Contains"关键字,这些关键字执行相同但不要求客户端知道特定商店的类似语法. (4认同)