MapleStory Cookie With Halo

🍃 Spring/🍃 Spring Boot

[SpringBoot][Gradle]스프링 데이터 JPA. 설정부터 사용까지 입문편.

뉴이 NUEY 2025. 1. 10. 15:53
반응형

 

Spring Data JPA

 

 

  • JPA를 도와주는 기술입니다.

  • 보통 반복 개발하는 CRUD 기능부터 페이징까지 제공합니다.

❗ JPA를 공부한 다음 Spring Data JPA를 공부해야 한다.

 

 


 

사용법

 

  1. Repository
    • src-main-java-hello-hellospring-repository패키지에 인터페이스 SpringDataJpaMemberRepository를 만든다.
    • SpringDataJpaMemberRepository

      •  JpaRepository 를 확장extends한다.
        → JpaRepository는 리포지토리를 자동으로 빈으로 만들어 스프링 컨테이너에 올린다.

      • 제네릭 타입으로 <엔티티T, 기본키 타입ID > 설정.

      • 상위 인터페이스 리포지토리를 추가로 확장한다.

    • 이 인터페이스의 구현 클래스가 없어도 아래 2.config만 설정해도 이렇게 코드 실행이 가능하다.
    • jpa API doc에 있는 메서드들은 모두 사용할 수 있기 때문이다.
    • 위 findByName() 메서드는 doc에 없는데 사용할 수 있다.

      • JPQL에는 규칙이 있어서 메서드명을 findBy + Name라고 적으면 

        select m from Member m where m.name = ?

        과 같이 변환해 실행한다.
        아주 복잡한 쿼리 말고 대부분의 코드는 이렇게 인터페이스만으로 구현이 가능한다.
      • findByNamdOrId 와 같이 'or' 나 'and'를 이용해서 조합도 가능하다.
    • 전체코드
      더보기
      package hello.hellospring.repository;
      
      import java.util.List;
      import java.util.Optional;
      import org.springframework.data.jpa.repository.JpaRepository;
      import hello.hellospring.domain.Member  ;
      
      @SuppressWarnings("unchecked")
      public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
      
          @Override
          public Member save(Member member);
      
          @Override
          Optional<Member> findById(Long id);
      
          @Override
          Optional<Member> findByName(String name);
      
          @Override
          List<Member> findAll();
      }
  2. config

    • 리포지토리를 생성자 의존성 주입DI으로 받아서 서비스에서 사용한다.

    • 전체코드
      더보기
      package hello.hellospring;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      import hello.hellospring.repository.MemberRepository;
      import hello.hellospring.service.MemberService;
      
      @Configuration
      public class SpringConfig {
      
          private final MemberRepository memberRepository;
      
          @Autowired
          public SpringConfig(MemberRepository memberRepository) {
              this.memberRepository = memberRepository;
          }
      
          @Bean
          public MemberService memberService() {
              return new MemberService(memberRepository);
          }
      }

 


 

💡 실무에서는 JPA와 스프링 데이터 JPA를 사용하고, 복잡한 동적 쿼리는 Querydsl 라이브러리를 사용한다. 이 조합으로 사용하기 힘든 경우 네이티브 쿼리(SQL 쿼리)를 사용하거나 Jdbc Template을 사용한다.

 

 

※ 참조 : https://www.inflearn.com/roadmaps/373

반응형