스프링 데이터 JPA

Haechan Kim·2022년 7월 10일
0

Spring

목록 보기
12/68

스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술.

  • SpringDataJpaMemberRepository.java (인터페이스)
// 인터페이스가 인터페이스 받을때는 extends
// 구현체 없어도 됨
// 인터페이스만 있음 -> 스프링 데이터 jpa가 JpaRepository 받고 있으면 구현체 자동으로 만들고
// 자동으로 스프링 빈에 등록.
// config에서 그냥 가져다 쓰면 됨.
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository { // <T, id(식별자 pk)>, 다중 상속
    Optional<Member> findByName(String name);
}
  • SpringConfig.java
// 컴포넌트 스캔, 자동 의존관계 설정(어노테이션) 대신 직접 코드로 스프링 빈 등록
// 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔 사용.
// 정형화 되지 않거나 상황에 따라 구현 클래스 변경해야 한다면 설정 통해 스프링 빈 등록

@Configuration
public class SpringConfig {

//    private DataSource dataSource;
//
//    @Autowired
//    public SpringConfig(DataSource dataSource) {
//        this.dataSource = dataSource;
//    }

//    private EntityManager em;
//
//    @Autowired
//    public SpringConfig(EntityManager em) {
//        this.em = em;
//    }

    private final MemberRepository memberRepository;

    @Autowired // 스프링 컨테이너에서 MemberRepository 찾음. 자동 등록된 SpringDataJpaMemberRepository 구현체
    public SpringConfig(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Bean // 내가 스프링 빈 등록할것이라는 뜻
    public MemberService memberService() {
        return new MemberService(memberRepository); // ctrl+p 무엇을 넣어야 할 지
    }

//    @Bean
//    public MemberRepository memberRepository() {
//        //return new MemoryMemberRepository(); // MemberRepository는 인터페이스. 인터페이스는 new가 안됨
//        //return new JdbcMemberRepository(dataSource);
//        //return new JdbcTemplateMemberRepository(dataSource);
//        //return new JpaMemberRepository(em);
//    }
}

스프링 데이터 JPA가 SpringDataJpaMemberRepository 를 스프링 빈으로 자동 등록해준다.

  • 스프링 데이터 JPA 재공 기능
    스프링 데이터 JPA는 findAll, save, getOne 등 기본 메서드는 다 내장되어 있고 findByName() , findByEmail() 처럼 메서드 이름 만으로 조회 기능을 제공한다.

findByName -> findBy 뒤에 Name이 온다면 JPQL: select m from Member m where m.name = ? 만들어서 실행.
findByNameAndId 도 비슷한 식으로 다 규칙 존재.
인터페이스 이름만으로도 알아서.

0개의 댓글