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() : 파라미터 바인딩 해서 특정 이름에 의한 회원 찾기