Jpa Repository 支持的自定义查询方法名称关键词

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/09/jpa-repository.html

上篇文章介绍了 “使用jpa的 Repository 自定义声明式查询方法” (declare query method)

使用jpa的 Repository 自定义声明式查询方法

凡是继承了Repository的或继承其子接口的,都可以使用自定义的声明式查询方法,如下示例:

public interface PersonQueryRepo extends Repository {
    // declare query method
    // 声明式查询方法 

    // 1. count 计数 
    long countByName(String name); 
    // 2. get/find/stream/query/read 查询 
    Person readFirstByAge(int age); 
    // 3. delete/remove 删除 
    int deleteById(long id);
 }

声明式查询方法可以分3大类:

1 计数类 :以count开头,返回数值类型

springboot整合jpa的基本使用方法大全插图

2 查询类:以get/find/stream/query/read开头,返回Person类或其集合

springboot整合jpa的基本使用方法大全插图(1)

3 删除类: 以delete/remove开始,返回int类型

springboot整合jpa的基本使用方法大全插图(2)

在以上方法之后还有可以加入下面的关键词:

jpa声明式查询方法名称关键词

其中声明式查询方法的方法名称支持的关键字 如下:

KeywordSampleJPQL snippet
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
Is,
Equals
findByFirstname,
findByFirstnameIs,
findByFirstnameEquals
… where x.firstname = ?1
BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2
LessThanfindByAgeLessThan… where x.age < ?1
LessThanEqualfindByAgeLessThanEqual… where x.age <= ?1
GreaterThanfindByAgeGreaterThan… where x.age > ?1
GreaterThanEqualfindByAgeGreaterThanEqual… where x.age >= ?1
AfterfindByStartDateAfter… where x.startDate > ?1
BeforefindByStartDateBefore… where x.startDate < ?1
IsNullfindByAgeIsNull… where x.age is null
IsNotNull,
NotNull
findByAge(Is)NotNull… where x.age not null
LikefindByFirstnameLike… where x.firstname like ?1
NotLikefindByFirstnameNotLike… where x.firstname not like ?1
StartingWithfindByFirstnameStartingWith… where x.firstname like ?1 (parameter bound with appended %)
EndingWithfindByFirstnameEndingWith… where x.firstname like ?1 (parameter bound with prepended %)
ContainingfindByFirstnameContaining… where x.firstname like ?1 (parameter bound wrapped in %)
OrderByfindByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname desc
NotfindByLastnameNot… where x.lastname <> ?1
InfindByAgeIn(Collection<Age> ages)… where x.age in ?1
NotInfindByAgeNotIn(Collection<Age> ages)… where x.age not in ?1
TruefindByActiveTrue()… where x.active = true
FalsefindByActiveFalse()… where x.active = false
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)

因此,jpa中使用以上三类操作,加上上表中的关键词作为约束条件,就可以极限大部分的查询和日常操作。

此外,对于jpa中更新的update操作,推荐使用@Query注解,详见http://jvm123.com/2019/09/springboot-jpa.html

发表评论