주노 님의 블로그

[Spirng] 7. Spring 데이터베이스 연동 - 스프링 데이터 Jpa 본문

공부/Spring

[Spirng] 7. Spring 데이터베이스 연동 - 스프링 데이터 Jpa

juno0432 2024. 7. 30. 00:19

시작하기에 앞서

아래 내용은 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근기술에서 발췌한 내용입니다.

 

 

강의자료 일부를 발췌하는건 괜찮다고 하셨다.

무료강의로 지식을 공유해주신 김영한님께 다시한번 감사의 인사를 올리겠습니다

(_ _) (유료도 샀어요!)

 

스프링 부트와 JPA만 사용해도 개발 생산성이 많이 증가하고, 개발해야할 코드도 줄어들지만

스프링 데이터 JPA를 사용하게되면 개발이 더 단순해진다.

 

1. REPOSITORY 생성

public interface SpringDtaJpaMemberRepository extends JpaRepository <Member, Long> , MemberRepository
{
    @Override
    Optional<Member> findByName(String name);
}

특이하게 인터페이스를 만든다

JpaRepository<클래스,pk>를 받고, 기존에 구현한 MemberRepository도 받는다 

끝이다,

왜 이렇게 단순하게 가능하냐면 JpaRepository 가 거의 모든 기능을 제공하기 때문이다

 

2. SpringConfig 설정

jpaRepository를 상속받고 있으면, 스프링이 스프링 빈으로 자동으로 등록한다.

private MemberRepository memberRepository;

@Autowired
public SpringConfig(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

스프링 컨테이너에서, memberRepository를 찾는다,

jparepository를 상속받는 인터페이스를 만들면 스프링 컨테이너는 알아서 찾고

의존성 주입을 해준다.

 

//    @Bean
//    public MemberRepository memberRepository()
//    {
//        return new MemoryMemberRepository();
//        return new JdbcMemberRepository(dataSource);
//        return new JdbcTemplateMemberRepository(dataSource);
//        return new JpaMemberRepository(em);
//
//    }
}

 

위 코드는 없어도 된다

자동으로 빈에 등록해준다.

 

3. 통합테스트

void 회원가입()
{
    //given - when - then패턴을 사용하면 가독성과 유지보수가 좋다!
    //given 테스트의 사전조건
    Member member1 = new Member();
    member1.setName("juno");

    //when  실행했을때, 동작을 수행하는 부분
    Long saveId = memberService.join(member1);

    //then 결과가 ~ 나와야한다.
    Member findMember = memberService.findOne(saveId).get();
    assertThat(member1.getName()).isEqualTo(findMember.getName());
}

 

public interface MemberRepository {
    //회원 저장
    Member save(Member member);
    //특정 id를 가진 도메인을 조회한다
    Optional<Member> findById(Long id);
    //특정 이름을 가진 도메인을 조회한다.
    Optional<Member> findByName(String name);
    //저장된 모든 내용을 불러온다
    List<Member> findAll();
}

 

 

실무에서 사용한다면 jpa와 스프링데이터 jpa를 사용하고

복잡한 동적 쿼리는 querydsl을 사용한다

더 어려운 쿼리라면 jdbcTemplate를 사용하면된다.