@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 |