[Spring JPA #21] Spring JPA 쿼리 메서드 및 정렬
- Spring/Spring JPA
- 2019. 2. 2. 10:18
| Spring JPA 쿼리 메서드
Spring JPA에서 DB에 쿼리를 날릴 때 사용할 수 있는 방법은 크게 3가지가 있습니다.
1. 리포지터리 메서드
2. @NamdeQuery
3. @Query
[Spring/Spring JPA] - [Spring JPA #13] 스프링 데이터 쿼리 만들기
| Spring JPA 쿼리 메서드 예제
Repository 인터페이스에 메서드명으로 어떤 쿼리를 날릴 지 정할 수 있습니다.
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findByTitleStartsWith(String title);
}
"Title이 현재 들어온 인자값으로 시작하는 엔티티를 찾아라"라는 의미의 쿼리 메서드입니다.
다음과 같이 도메인 클래스에 @NamedQuery 어노테이션을 붙여서 JPQL을 사용하여 쿼리를 지정할 수 있습니다. 만일 Native 쿼리를 사용하고 싶다면 @NamedNativeQuery 어노테이션을 붙여서 사용할 수 있습니다.
@Entity
@Data
@NamedQuery(name = "Post.findByTitle", query="SELECT p FROM Post AS p WHERE p.title = ?1")
public class Post {
@Id @GeneratedValue
private Long id;
private String title;
@Temporal(TemporalType.TIMESTAMP)
private Date created;
}
Repository 인터페이스에 @Query 어노테이션을 붙여서 사용할 수 있습니다. 만일 Native 쿼리를 사용하고자 하면 @Query(nativeQuery=true) 정보를 추가하면 됩니다.
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findByTitleStartsWith(String title);
@Query("SELECT p FROM Post as p where p.title = ?1")
List<Post> findByTitle(String title);
}
| Spring JPA 쿼리 메서드 정렬
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findByTitleStartsWith(String title);
@Query("SELECT p FROM Post as p where p.title = ?1")
List<Post> findByTitle(String title, Sort sort);
}
@Query 안에 있는 쿼리를 정렬하기 위해서는 Sort 클래스 형태로 Sort 정보를 넘겨줘야합니다. 여기서 sort에 넘겨줘야하는 정보는 도메인 클래스의 Property 혹은 alais 여야 합니다.
List<Post> all = postRepositry.findByTitle("Spring", Sort.by("title"));
만일 LENGTH(title)과 같이 기본적으로 위와 같은 정렬 정보가 아닌 다른 특수한 기준으로 정렬을 하고자 할 때는 다음과 같이 JpaSort.unsafe 메서드를 추가하여 사용할 수 있습니다.
all = postRepositry.findByTitle("Spring", JpaSort.unsafe("LENGTH(title)"));
https://www.inflearn.com/course/스프링-데이터-jpa
'Spring > Spring JPA' 카테고리의 다른 글
[Spring JPA #23] Spring JPA EntityGraph (1) | 2019.02.02 |
---|---|
[Spring JPA #22] Spring JPA Named Parameter, SpEL (0) | 2019.02.02 |
[Spring JPA #20] 스프링 부트 Spring JPA 엔티티 저장 메커니즘 (0) | 2019.02.02 |
[Spring JPA #19] 스프링 데이터 HATEOAS (0) | 2019.02.01 |
[Spring JPA #18] 스프링 데이터 Pageable과 Sort (0) | 2019.02.01 |
이 글을 공유하기