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开发