@Query
- SpringDataJpa에서 제공하지 않는 메서드는 쿼리로 작성
- PostsRepository
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface PostsRepository extends JpaRepository<Posts, Long> {
@Query("SELECT p FROM Posts p ORDER BY p.id DESC")
List<Posts> findAllDesc();
}
- 데이터 조회는 FK의 조인, 복잡한 조건 등으로 인해 Entity 클래스만으로 처리가 어려워 조회용 프레임워크를 추가로 사용
- querydsl, jooq, MyBatis 등
- 등록/수정/삭제 등은 SpringDataJpa를 통해 진행
- querydsl을 추천
- 타입 안정성이 보장
- 메서드 기반으로 쿼리 생성, 오타나 존재하지 않는 컬럼명을 명시할 경우 IDE에서 자동 검출
- jooq도 지원, MyBatis는 지원x
- 국내 많은 회사에서 사용
- 레퍼런스가 많다.
- 타입 안정성이 보장
- PostsService
// 글목록
@Transactional(readOnly = true)
public List<PostsListResponseDto> findAllDesc() {
return postsRepository.findAllDesc().stream()
.map(PostsListResponseDto::new)
.collect(Collectors.toList());
}
- (readOnly = true): 트랜잭션 범위는 유지하되 조회 기능만 남겨두어 조회 속도 개선
- .map(PostsListResponseDto::new)
- .map(posts -> new PostsListResponseDto(posts))
- postsRepository 결과로 넘어온 Posts의 Stream을 map을 통해 PostsListResponseDto 변환 -> List로 반환하는 메서드
- Controller에서 Model 객체에 List<PostsListResponseDto> 저장

'개발 > Spring' 카테고리의 다른 글
| [JPA] 게시글 1000만건 처리하기 (0) | 2022.11.03 |
|---|---|
| [SpringBoot] MariaDB 연동 / querydsl 설정 (0) | 2022.10.12 |
| [SpringBoot] Mustache를 이용하여 화면 만들기 (0) | 2022.09.08 |
| [SpringBoot] 머스테치 Mustache (0) | 2022.09.08 |
| [SpringBoot] JPA Auditing으로 생성시간/수정시간 자동화하기 (0) | 2022.09.08 |