스프링 데이터 JPA

  • 구현체 없이 인터페이스만으로 리포지토리에 커밋이 가능한 코드를 만들 수 있다.
  • 반복적으로 개발한 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다.
  • RDB에서 스프링 데이터 JPA는 아주 좋은 기능이다.

스프링 데이터 JPA 인터페이스

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {

    @Override
    Optional<Member> findByName(String name);
}

이외의 인터페이스 선언이나 구현체는 필요없다.

  • 인터페이스 이름에 규칙이 있다. (JPQL)
  • 예를들어 findByNameAndId 라고 하면 & 연산자를 넣을 수 있다.
  • 간단한 요구사항은 인터페이스 이름만으로 개발이 끝난다.
  • 페이징 기능을 자체적으로 제공한다.

Bean 설정

@Configuration
public class SpringConfiguration {

    private final MemberRepository memberRepository;

    public SpringConfiguration(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository);
    }
}

의존주입도 Repository 의존만 받아오면 된다.

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

QueryDSL

  • 복잡한 동적 쿼리를 위한 라이브러리.
  • ORM으로 해결하기 어려운 쿼리들은 JdbcTemplate를 사용하면 된다.