스프링 데이터 JPA를 사용하면 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다.
사용법을 알아보자.
1) SrpingDataJpaMemberRepostiory 인터페이스를 생성
- SrpingDataJpaMemberRepostiory 인터페이스에 extends JapRepository <Member, Long>, MemberRepostiory로 상속받는다.
- 상속을 받게되면 Spring Jpa가 JpaRepostiory를 상속받는 클래스의 구현체를 자동으로 만들어주고, 만들어진 구현체를 토대로 스프링 빈에 자동으로 등록을 해준다.
- 우리는 이제 SpringConfig에서 등록된 MemberRepository를 사용하면 된다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface SpringDataJapMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
@Override
Optional<Member> findByName(String name);
}
- 여기서 부연설명을 하자고 하면 findByName은 따로 만든 이유는 데이터 베이스마다 조회할 때 엔티디 정보들이 전부 다르기 때문에 해당하는 값은 직접 지정해줘야 된다. 또한 추가적인 엔티티로 조회를 하기 위해서는 findByNameAndIDAnd... 이런 식으로 추가해 주면 된다.
2) SpringConfig DI 의존성 주입
- 자동으로 등록된 MemberRepository로 변경해주자.
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
/*@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
// return new JdbcTemplateMemberRepository(dataSource);
// return new JpaMemberRepository(em);
}*/
}
결론
우리는 이제 쿼리 하나 없이 인터페이스를 구현한 것만으로 데이터 조회, 추가, 삭제 등 간단한 쿼리드를 작성할 수 있다. 그리고 복잡한 쿼리들은 jdbcTemplate이나, 마이 바티스, 등등 여러 가지 조합들을 통해서 조회하면 된다고 설명한다. 이후에 JPA를 들을 것이지만, 해당하는 기술을 접하지 못한 사람들이 이 코드를 봤을 때 동작을 어떻게 유추해야 될지.. 감이 안 올 것 같다.
이 글은 인프런의
제목 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강사 : 김영한 님의 동영상을 참조해 만들었습니다.
'Spring > 스프링 입문' 카테고리의 다른 글
AOP가 필요한 상황, 사용법 (0) | 2022.03.10 |
---|---|
스프링 JPA & 통합 테스트 (0) | 2022.03.08 |
스프링 JDBCTemplate & 통합 테스트 (0) | 2022.03.08 |
스프링 통합 테스트 (0) | 2022.03.08 |
순수 JDBC 사용 및 연동 (0) | 2022.03.08 |