본문 바로가기

개발/Spring

[SpringBoot] 데이터 조회

 

 

 

@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> 저장

 

 

글목록 화면