[SpringBoot] Repository와 EntityManager 의존성 주입

2023. 5. 2. 14:04
반응형

Repository

Repository는 데이터베이스와의 상호 작용을 담당

Repository는 데이터베이스에 액세스하기 위한 메서드를 정의하고, 데이터를 검색, 저장, 업데이트 및 삭제하는데 사용

@Repository
@RequiredArgsConstructor
public class MemberRepository {

    private final EntityManager em;


    public void save(Member member){
        em.persist(member);
    }
    
 }
  • @Repository 어노테이션은 Spring에서 Repository 계층의 빈으로 등록하기 위해 사용
  • EntityManager JPA에서 데이터베이스와 상호작용을 위해 사용되는 인터페이스. EntityManager는 영속성 컨텍스트를 통해서 데이터베이스와 상호작용하며, JPA의 통신 기능을 추상화한 것.
  • EntityManager를 주입받아 JPA 사용하여 데이터베이스와 상호작용할 있게 된다.

 

 

 

 

Repository의 EntityManager 의존성 주입

 

1. @PersistenceContext 사용

@Repository
public class MemberRepository {

    @PersistenceContext
    private EntityManager em;


    public void save(Member member){
        em.persist(member);
    }
    
 }
  • @PersistenceContext는 EntityManager 인터페이스를 구현한 클래스의 인스턴스를 주입하는 사용

2. @Autowired 어노테이션으로 주입

@Repository
public class MemberRepository {

    @Autowired
    private EntityManager em;

    
    public void save(Member member){
        em.persist(member);
    }
    
 }

 

  • 이제 JPA에서 @PersistenceContext 대신 @Autowired를 사용하는 것을 지원한다.

 

 

3. 생성자 주입

@Repository
public class MemberRepository {

    private final EntityManager em;

    //@Autowired
    public MemberRepository(EntityManager em){
        this.em = em;
    }
    
    public void save(Member member){
        em.persist(member);
    }
    
 }
  • 생성자를 통해 의존성 주입을 한다.
  • 생성자가 하나이고,  이미 스프링 빈에 등록이 되었으므로 @Autowired를 생략할 수 있다.
  • final 키워드를 사용하여 필드를 선언하면 해당 필드가 변경되지 않음을 보장할 있기 때문에, Thread-safe하지 않은 경우에도, 해당 필드가 불변이기 때문에 다른 스레드에서 의도치 않은 변경이 일어나는 것을 방지할 있음

 

4. @RequiredArgsConstructor

 

@Repository
@RequiredArgsConstructor
public class MemberRepository {

    private final EntityManager em;

    
    public void save(Member member){
        em.persist(member);
    }
    
 }
  • Lombok 어노테이션으로, final 필드만을 매개변수로 받는 생성자를 자동으로 생성
  • 해당 클래스에서 사용하는 의존성을 자동으로 주입받을 있도록 해줌

 


https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강

www.inflearn.com

 

해당 포스팅은 본 강의 수강을 따라가면서 작성합니다.

반응형

BELATED ARTICLES

more