회원 리포지토리 개발

기술 설명

  • @Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환

  • @PersistenceContext : 엔티티 메니저( EntityManager ) 주입

  • @PersistenceUnit : 엔티티 메니터 팩토리( EntityManagerFactory ) 주입

기능 설명

  • save() 영속성 컨텍스트에 Member 객체 넣는다. 트랜잭션이 커밋되는 시점에 DB에 반영된다!(DB에 insert 쿼리가 들어간다!)

    EntityManager.persist(member);
  • findOne() JPA의 find메서드 사용 find(타입,PK)

    return em.find(Member.class,id);
  • findAll() JPQL : SQL과 거의 똑같은데 from의 대상이 테이블이 아니라 엔티티다! EntityManager.creatQuery(JPQL쿼리, 조회 타입)

    return em.createQuery("select m from Member m",Member.class)
            .getResultList();
  • findByName() 파라미터 바인딩(where m.name = :name)해서 특정 이름의 회원들만 조회한다!

    return em.createQuery("select m from Member m where m.name = :name",Member.class)
            .setParameter("name",name)
            .getResultList();
package jpabook.jpashop.repository;

import jpabook.jpashop.domain.Member;
import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
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();
    }
    // m.name = :name 파라미터 바인딩해서 특정 이 회원들만 조회
    public List<Member> findByName(String name){//,Member.class : 조회 타입은 Member
        return em.createQuery("select m from Member m where m.name = :name",Member.class)
                .setParameter("name",name)
                .getResultList();
    }
}

Last updated