Backend
[실전! 스프링부트와 JPA활용] 회원 레포지토리 개발
햣둘
2025. 4. 3. 07:30
구현 기능
- 회원 등록
- 회원 목록 조회
순서
✅ [완료] 회원 엔티티 코드 다시 보기
✅ [완료] 회원 레포지토리 개발
➡️ [계획] 회원 서비스 개발
➡️ [계획] 회원 기능 테스트
회원 레포지토리 개발
회원 레포지토리 코드
package jpabook.jpashop.repository;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jpabook.jpashop.domain.Member;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
public void save(Member member){
em.persist(member);
}
public Member findOne(Long id){
return em.find(Member.class, id);
}
public List<Member> findAll(){
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
public List<Member> findByName(String name){
return em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
}
}
기술 설명
@Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환
@PersistenceContext : 엔티티 매니저(EntityManager) 주입
@PersistenceUnit : 엔티티 매니저 팩토리(EntityManagerFactory) 주입
기능 설명
save() : persist 하면 영속성 context에 멤버 객체를 넣음 -> 나중에 트랜잭션이 커밋되는 시점에 DB에 반영됨(insert 쿼리가 날아감)
findOne() : find 메서드를 사용해서 단건 조회 Member.class는 타입, 두번째는 pk를 넣어주면 되니까 id
findAll() : JPQL 사용, from의 대상이 테이블이 아니라 엔티티임,
findByName() : 파라미터 바인딩 해서 특정 이름에 의한 회원 찾기