일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SpringBoot
- 그리디
- AOP
- Servlet
- JDBC
- jpa
- db
- kotlin
- Greedy
- 스프링 핵심 원리
- JPQL
- pointcut
- 자바
- http
- QueryDSL
- 백준
- 인프런
- 김영한
- 스프링 핵심 기능
- springdatajpa
- 스프링
- 알고리즘
- Thymeleaf
- Exception
- Android
- Proxy
- Spring Boot
- spring
- transaction
- java
- Today
- Total
개발자되기 프로젝트
Query Method 활용1 본문
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규칙이다.
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 |