Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- java map 저장
- java map 출력
- java참조자료형
- 항해15기
- java set 저장
- java기본자료형
- java알고리즘문제풀이
- java 자료구조 활용
- javaJVM
- 프로그래머스제일작은수
- 코딩부트캠프후기
- 작은수제거하기
- 프로그래머스
- 격파르타비전공자
- 항해99후기
- 격파르타후기
- 격파르타장점
- java list 저장
- 컴파일
- java알고리즘
- java list 출력
- java최솟값구하기
- 인터프린터언어
- 격파르타합격후기
- sqld자격증합격
- 비전공자sqld
- java map
- 노베이스부트캠프
- java set 출력
- javaJRE
Archives
- Today
- Total
코딩과 결혼합니다
[Spring Data JPA] 쿼리 메서드(2) 본문
728x90
파라미터 바인딩
@Query("select m from Member m where m.username in :names")
List<Member> findByNames(@Param("names") List<String> names);
쿼리 메서드는 복잡할수록 굉장히 길어진다. 그래서 위와 같이 파라미터 바인딩을 사용할 수 있는데,
위치 기반, 이름 기반 등의 방법이 있다.
select m from Member m where m.username = ?0 //위치 기반
select m from Member m where m.username = :name //이름 기반
위치 기반의 경우에는 유지보수에 취약할 수 있기 때문에 이름 기반을 사용하도록 한다.
반환타입
List<Member> findListByUsername(String username); // 컬렉션
Member findMemberByUsername(String username); //단건
Optional<Member> findOptionalByUsername(String username);//단건 Optional
- 컬렉션의 경우에는 결과가 없으면 빈 컬렉션을 반환해 준다.
- 단건 조회의 경우에는 결과가 없으면 null / 결과가 단건이 아닐 때에는 NonUniqueResultException이 발생한다.
Spring Data JPA 페이징과 정렬
org.springframework.data.domain.Sort //정렬 기능
org.springframework.data.domain.Pageable //페이징 기능(내부에 Sort 포함)
스프링 데이터 JPA는 페이징과 정렬을 어떠한 DB도 사용할 수 있도록 공통화를 시켰다.
Page<자바 컬렉션> // 추가 count 쿼리 결과를 포함하는 페이징
Slice<자바 컬렉션> // 추가 count 쿼리 없이 다음 페이지만 학인 가능
List<자바 컬렉션> // 추가 count 쿼리 없이 결과만 반환
Slice의 경우에는 size을 3으로 하였을 때, 3개를 요청하지 않고 limit에 +1개 하여 4개를 요청한다. (토탈 카운트 사용 X)
그래서 다음 페이지 여부를 확인한다. (최근 모바일 리스트, 더보기나 다음 거를 미리 로딩하는 등)
*totalCount의 경우 결국에는 DB의 모든 데이터를 카운트를 해야 한다. DB 내 분에서 최적화를 할 수는 있지만 그래도 성능이 느리다. totalCount가 많아질 때 쿼리를 잘 짜야한다.
@Query(value = "select m from Member m left join m.team t",
countQuery = "select count (m) from Member m")
Page<Member> findByAge(int age, Pageable pageable);
예시. 카운트쿼리를 따로 구현해주었다. count 를 그냥 m으로 하여 아주 단순하게 조회하도록 하여 최적화.
'2세 > JPA' 카테고리의 다른 글
[JPA] Join 문법 (2) | 2024.03.08 |
---|---|
[Spring Data JPA] 쿼리 메서드(3) (0) | 2024.03.03 |
[Spring Data JPA] 쿼리 메서드 (0) | 2024.02.28 |
[Spring Data JPA] 순수 JPA와 Spring Data JPA (0) | 2024.02.27 |
[JPA] 컬렉션 조회 최적화(1) (0) | 2024.02.25 |