웹(Web)/백엔드(Backend)

Spring JPA 쿼리메소드

SK_MOUSE 2022. 2. 20. 23:26
메소드 이름 안에서 지원되는 키워드

메소드 이름 안에서 지원되는 키워드

출처:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

 

Spring에서 JPA가 지원해주는 쿼리 메소드는 아래와 같이 사용한다.

interface상에서 이름으로만 정의해주면 메소드가 알아서 쿼리를 생성하여 활용 할 수 있다.

 

* Intellij Ultimate버전에서만 위 기능 자동완성을 지원해준다.

KeywordSampleJPQL snippet

Distinct findDistinctByLastnameAndFirstname select distinct …​ where x.lastname = ?1 and x.firstname = ?2
And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2
Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Is, Equals findByFirstname,findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1
Between findByStartDateBetween … where x.startDate between ?1 and ?2
LessThan findByAgeLessThan … where x.age < ?1
LessThanEqual findByAgeLessThanEqual … where x.age <= ?1
GreaterThan findByAgeGreaterThan … where x.age > ?1
GreaterThanEqual findByAgeGreaterThanEqual … where x.age >= ?1
After findByStartDateAfter … where x.startDate > ?1
Before findByStartDateBefore … where x.startDate < ?1
IsNull, Null findByAge(Is)Null … where x.age is null
IsNotNull, NotNull findByAge(Is)NotNull … where x.age not null
Like findByFirstnameLike … where x.firstname like ?1
NotLike findByFirstnameNotLike … where x.firstname not like ?1
StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %)
EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %)
Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %)
OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc
Not findByLastnameNot … where x.lastname <> ?1
In findByAgeIn(Collection<Age> ages) … where x.age in ?1
NotIn findByAgeNotIn(Collection<Age> ages) … where x.age not in ?1
True findByActiveTrue() … where x.active = true
False findByActiveFalse() … where x.active = false
IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstname) = UPPER(?1)



코드 샘플

package com.thinkground.aroundhub.data.repository; import com.thinkground.aroundhub.data.entity.ProductEntity; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface ProductRepository extends JpaRepository<ProductEntity, String> { ​​​​/* 쿼리 메소드의 주제 키워드 */ ​​​​// 조회 ​​​​List<ProductEntity> findByProductName(String name); ​​​​List<ProductEntity> queryByProductName(String name); ​​​​// 존재 유무 ​​​​boolean existsByProductName(String name); ​​​​// 쿼리 결과 개수 ​​​​long countByProductName(String name); ​​​​// 삭제 ​​​​void deleteByProductId(String id); ​​​​long removeByProductId(String id); ​​​​// 값 개수 제한 ​​​​List<ProductEntity> findFirst5ByProductName(String name); ​​​​List<ProductEntity> findTop3ByProductName(String name); ​​​​/* 쿼리 메소드의 조건자 키워드 */ ​​​​// Is, Equals (생략 가능) ​​​​// Logical Keyword : IS , Keyword Expressions : Is, Equals, (or no keyword) ​​​​// findByNumber 메소드와 동일하게 동작 ​​​​ProductEntity findByProductIdIs(String id); ​​​​ProductEntity findByProductIdEquals(String id); ​​​​// (Is)Not ​​​​List<ProductEntity> findByProductIdNot(String id); ​​​​List<ProductEntity> findByProductIdIsNot(String id); ​​​​// (Is)Null, (Is)NotNull ​​​​List<ProductEntity> findByProductStockIsNull(); ​​​​List<ProductEntity> findByProductStockIsNotNull(); ​​​​// And, Or ​​​​List<ProductEntity> findTopByProductIdAndProductName(String id, String name); ​​​​// (Is)GreaterThan, (Is)LessThan, (Is)Between ​​​​List<ProductEntity> findByProductPriceGreaterThan(Integer price); ​​​​// (Is)Like, (Is)Containing, (Is)StartingWith, (Is)EndingWith ​​​​List<ProductEntity> findByProductNameContaining(String name); }
반응형