반응형
동적인 조건으로 조회를 하거나(ex.검색쿼리) 복잡한 쿼리를 해야한다면 Querydsl을 추천
하지만 단순한 crud라면 쿼리 메소드를 이용하면 매우 간단 편리하며 생산성을 올릴 수 있다!
쿼리메소드 키워드 표
| Keyword | Sample | JPQL 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 (파라미터 뒤에 % 붙이기) |
| EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (파라미터 앞에 % 붙이기) |
| Containing | findByFirstnameContaining | … where x.firstname like ?1 (파라미터 %로 감싸기) |
| 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) |
[참고 - Spring Data JPA 참조 문서]
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
Spring Data JPA - Reference Documentation
Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del
docs.spring.io
반응형
'개발 > JPA' 카테고리의 다른 글
| [JPA] 상속관계 매핑 - 상속 전략 (0) | 2022.04.06 |
|---|---|
| [JPA] 영속성 컨텍스트 / 엔티티의 생명주기 (0) | 2022.03.31 |
| [JPA] Querydsl 조회 결과 DTO에 담는 법 / 예문 (0) | 2022.01.20 |
| [JPA] enum 타입 DB에 저장시 값 변환 / @Converter / AttributeConverter (0) | 2022.01.19 |
| [JPA] postgres 스키마 설정 / default schema 설정 (0) | 2022.01.17 |
댓글