Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Query Method 활용1 본문

JPA

Query Method 활용1

Seung__ 2021. 5. 26. 20:22

findByName()이라는 method를 만들어 보자. 진짜 간단하다..

 

UserRepositlry interface에 아래와 같이 추가했당.

public interface UserRepository extends JpaRepository<User, Long> {
                                                  
    List<User> findByName(String name);
    
}

 

그리고 아래처럼 test코드를 작성해보자.

@Test
    void select(){
        System.out.println(userRepository.findByName("hyun"));
    }

 

결과가 나왔다... 신기하다..

그러면 이름이 일치하는 entity가 List타입으로 불어와졌다...신기함..

 

JPA를 사용했을때 체감으로는 쉽게 작성하고 많은 혜택을 받는게 쿼리메서드

생성한 repository에 naming base로 method를 선언하기만 하면 자동으로 query  생성해줌

 


이번에는 Optional로 받을 수 있는지 확인해보자. 왜냐! findById가 Optional타입을 리턴하기 때문에! 궁금함

 

요렇게 수정하고 "steve"를 찾아보자.

 Optional<User> findByName(String name);
@Test
    void select(){
        System.out.println(userRepository.findByName("steve"));
    }

 없다! 값이 없는데도 Null Point Excepion이 발생하지 않았다. Optional 덕분이당.

*Optional : wrapper 클래스로 null값을 한 번 감쌀 수 있어서 Null Point Exception을 방지할 수 있다.


이번엔 Set으로 받아보자. 참고로 이름이 "hyun"인 entity는 2개이다. 

Set : 중복을 포함하지 않는다. 수학적의미의 집합이랑 비슷함. 중복 없고, 순서 없고.
Set<User> findByName(String name);
 @Test
    void select(){
        System.out.println(userRepository.findByName("hyun"));
    }

결과는 오류없이 잘 나왔당. 그리고 두 entity를 서로 다른 entity이다.


그러면 아까 만든 findByNaming처럼 우리가 사용할 수 있는 naming규칙이 어떤게 있을까

 

요즘은 ide에서 자동완성으로 제공해준다. find만 입력해도 자동완성으로 naming규칙을 보여준다.

아래 표는 Spring에서 제공하는 naming규칙이다.

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example

 

findBy나 readBy를 보면 find...By로 표기되어있다. 이는 findUserBy와 같이 entity이름을 넣을 수 있다는 것을 말함.

근데 보통은 줄여서 findBy로 사용함.

 

즉 아래와 같이 선언하는 것 만으로도 사용이 가능하다.

 

 

그리고 임의로 선언을 할 때 인식하지 않는 키워드는 JPA 쿼리 생성시 무시당한다 ㅋㅋㅋㅋ

 

보다 자세한 query method 설명은 

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

'JPA' 카테고리의 다른 글

Query Method 3  (0) 2021.05.27
Query Method 활용2  (0) 2021.05.26
SimpleJpaRepository분석  (0) 2021.05.24
Page , Query By Example(QBE)  (0) 2021.05.23
Repository 제공 기능 2  (0) 2021.05.23
Comments