본문 바로가기

Spring/SpringBoot

SpringBoot- EntityManager 생성법

@PersistenceContext 어노테이션

 기존의 EntityManagerFactory로 EntityManger를 생성해서 트랜잭션을 시작해야 했지만 SpringBoot에서는 build.gradle의 dependencies에

"implementation 'org.springframework.boot:spring-boot-starter-data-jpa'"

를 추가함으로써 @PersistenceContext 어노테이션의 사용이 가능하다.

사용 예시는 다음과 같다

MemberRepository.class

package jpabook.jpashop;

import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Repository //Member 엔티티를 관리하는 다양한 메서드 구현(저장, 조회 등등...)
public class MemberRepository {

    @PersistenceContext
    // EntityManger 생성 어노테이션!
    // EntityMangerFactory 만들고 주입하는 대신 @PersistenceContext 하나면 EntityManger를 만들어줌.
    // 단 사용하기 위해선 build.gradle에 dependencies로
    // "implementation 'org.springframework.boot:spring-boot-starter-data-jpa'" 입력 해줘야함
    private EntityManager em;

    // persist 함수 (id를 반환한다)
    public Long save(Member member) {
        em.persist(member);
        return member.getId();
    }

    // Member 엔티티 조회 후 반환 함수
    public Member find(Long id) {
        return em.find(Member.class, id);
    }
}

보다시피 em.find( ), em.persist( ) 모두 잘 사용하고 있는 것을 알 수 있다.

 

@RequiredArgsConstructor를 이용한 EntityManager 생성

 @PersisitenceContext 대신 DI를 통한 사용도 가능하다.

 

1) @RequiredArgsConstructor을 사용한 EntityManager (추천)

@Repository
@RequiredArgsConstructor
public class MemberRepository {

    private final EntityManager em;
}

 

1) @Autowired 사용한 EntityManager

@Repository
public class MemberRepository {

    @Autowired
    private EntityManager em;
}

2) @Autowired + 생성자 주입을 사용한 EntityManager

@Repository
public class MemberRepository {

    private EntityManager em;
	
    @Autowired // 생성자 주입. @Autowired는 생성자 하나일 땐 생략가능
    MemberRepository(EntityManager em){
    	this.em = em;
    }
}

 

 그 외로도 @AllArgsConstructor를 사용하거나 setter 주입이라던가 생성방법은 다양하다.

'Spring > SpringBoot' 카테고리의 다른 글

SpringBoot- @GetMapping, @PostMapping  (0) 2023.06.28
SpringBoot- Controller  (0) 2023.06.25
SpringBoot- @Transactional  (0) 2023.06.22
SpringBoot- 테스트 케이스 작성 예시  (0) 2023.06.20
SpringBoot- 기본 스프링 부트 설정  (0) 2023.06.20