반응형
메소드 이름 안에서 지원되는 키워드
출처: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);
}
반응형
'웹(Web) > 백엔드(Backend)' 카테고리의 다른 글
Java로 배우는 디자인패턴 (0) | 2022.07.14 |
---|---|
인프런 김영한 개발자님의 스프링강의 대략적인 틀 (0) | 2022.07.02 |
Spring 공통속성 JPA Auditing, EntityListener, MappedSupperclass (0) | 2022.02.18 |
스프링MVC패턴 Controller / Model(DAO,DTO,Service) / View (0) | 2022.02.13 |
DTO vs VO 비교 (+Entity) (0) | 2022.02.13 |