본문 바로가기
Spring 입문

스프링MVC 입문23

by danny-j 2022. 11. 14.

스프링 데이터 JPA

  • 스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어듬
  • 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있음
  • 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공
  • 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 즐거워짐
  • 지금까지 조금이라도 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어듬
  • 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있음
  • 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수

 

SpringDataJpaMemberRepository

package com.danny.learningspring.repository;

import com.danny.learningspring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

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

	// JPQL >> SELECT m FROM member m WHERE m.name = ?

    @Override
    Optional<Member> findByName(String name);
    
}
  • 인터페이스가 인터페이스를 상속 받을 때는 extends
  • JpaRepository를 상속 받고 있으면 SpringDataJpa가 자동으로 구현체를 빈으로 등록해줌
  • JpaRepository안에 기본 CRUD메서드들을 제공
  • JPQL 문법 -- findBy?? 기준으로 where절에 들어감
  • command + E -- Recent Files
  • Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있음

 

SpringConfig / Repository 교체

package com.danny.learningspring;

import com.danny.learningspring.repository.*;
import com.danny.learningspring.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.sql.DataSource;

@Configuration
@RequiredArgsConstructor
public class SpringConfig {

    private final MemberRepository memberRepository;
//    private final EntityManager em;
//    private final DataSource dataSource;

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

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

//    @Bean
//    public MemberRepository memberRepository() {
//        return new JpaMemberRepository(em);
//        return new JdbcTemplateMemberRepository(dataSource);
//        return new JdbcMemberRepository(dataSource);
//        return new MemoryMemberRepository();
//    }
}
  • 스프링 컨테이너에서 MemberRepository의 구현체를 찾아보고 구현체가 없지만 JpaRepository를 상속받는 SpringDataRepository를 발견하고 구현체를 만들어서 컨테이너에 빈을 등록

 

Test 결과

Passed

'Spring 입문' 카테고리의 다른 글

스프링MVC 입문25  (0) 2022.11.14
스프링MVC 입문24  (0) 2022.11.14
스프링MVC 입문22  (0) 2022.11.14
스프링MVC 입문21  (0) 2022.11.14
스프링MVC 입문20  (0) 2022.11.14

댓글