개발자의 오르막
SpringBoot 쿼리 메소드 사용하기 본문
# 쿼리 메소드 사용하기
Keyword |
Sample |
JPQL snippet |
And |
findByLastnameAndFirstname |
... where x.lastname = ?1 and x.firstname = ?2 |
Or |
findByLastnameOrFirstname |
... where x.lastname = ?1 or x.firstname = ?2 |
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 |
findByAgeIsNull |
... 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 wrapped in % ) |
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> age) |
... where x.age not in ?1 |
True |
findByActiveTrue() |
... where x.active = true |
False |
findByActiveFalse() |
... where x.active = false |
# 예제
- public List<Board> findBoardByTitle(String title);
- public Collection<Board> findByWriter(String writer);
- public Collection<Board> findByWriterContaining(String writer);
- public Collection<Board> findByTitleContainingOrContentContaining(String title, String content);
- public Collection<Board> findByTitleContainingAndBnoGreaterThan(String keyword, Long num);
- public Collection<Board> findByBnoGreaterThanOrderByBnoDesc(Long bno);
- public List<Board> findByBnoGreaterThanOrderByBnoDesc(Long bno, Pageable paging);
- public List<Board> findByBnoGreaterThan(Long bno, Pageable paging);
- public Page<Board> findByBnoGreaterThan(Long bno, Pageable paging);
# @Query 이용하기
- 리턴 값이 반드시 엔티티 타입이 아니라 필요한 몇 개의 칼럼 값들만 추출할 수 있다.
- nativeQuery 속성을 지정해서 데이터베이스에 사용하는 SQL을 그대로 사용할 수 있다.
- repository에 지정된 엔티티 타입 뿐 아니라 필요한 엔티티 타입을 다양하게 사용할 수 있다.
# 예제
- @Query("SELECT b FROM Board b WHERE b.title LIKE %?1% AND b.bno > 0 ORDER BY b.bno DESC")
public List<Board> findByTitle
- @Query("SELECT b FROM Board b WHERE b.content LIKE %:content% AND b.bno > 0 ORDER BY b.bno DESC")
public List<Board> findByContent(@Param("content") String content);
- @Query("SELECT b FROM #{#entityName} b WHERE b.writer LIKE %?1% AND b.bno >0 ORDER BY b.bno DESC")
List<Board> findByWriter(String writer);
- @Query("SELECT b.bno, b.title, b.writer, b.regdate FROM Board b WHERE b.title LIKE %?1%
AND b.bno > 0 ORDER By b.bno DESC)
public List<Objectp[> findByTitle2(String title);
# nativeQuery 사용
- @Query(value="SELECT bno, title, writer from tb1_boards where title like CONCAT('%', ?1, '%') and bno > 0
order by bno desc", nariveQuery = true)
List<Object[]> findByTitle3(String title);
- @Query("SELECT p FROM Post AS p WHERE p.title = :title")
List<Post>findByTitle(@Param("title") String title, Sort sort);
- @Query("SELECT p FROM #{#entityName} AS p WHERE p.title = :title")
List<Post> findByTitle(@Param("title") String title, Sort sort);
- @Modifying(clearAutomatically = true, flushAutomatically = true)
@Query("UPDATE Post p SET p.title = ?2 WHERE p.id = ?1")
int updateTitle(Long id, String title);
'SpringFrameWork > SpringBoot' 카테고리의 다른 글
[SpringBoot] ObjectMapper (0) | 2019.12.26 |
---|---|
[SpringBoot] Page 란? (0) | 2019.11.30 |
SpringBoot REST 기반 파일 업로드 (0) | 2019.10.17 |
Spring Boot JPA Query (0) | 2019.10.08 |
[Spring Boot + JPA ] DomainClassConvert, Pageable (0) | 2019.10.08 |