[ 구현 기능 ]
- 회원 등록
- 회원 단건 조회
- 회원 다건 조회
- 회원 이름으로 조회
jpashop
아래에 repository
패키지를 추가한 후 해당 패키지에 회원 리포지토리를 추가함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
@Repository
public class MemberRepository {
@Repository
@PersistenceContext
- EntityManger @PersistenceContext
private EntityManager em;
@PersistenceContext
: EntityManager 주입@PersistenceUnit
: EntityManagerFactory 주입EntityManager.persist(entity)
public void save(Member member){
em.persist(member);
}
EntityManager
를 통해 영속성 컨텍스트에 접근EntityManager.find(type, pk)
public Member findOne(Long id){
return em.find(Member.class, id);
}
find(class 이름, 기본키)
EntityManger.createQuery(jpql)
public List<Member> findAll(){
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
createQuery(jpql)
: jpql을 사용해서 조회 구현sql
은 테이블을 대상으로 쿼리를 작성하고, createQuery에 쓰이는 jpql
은 entity를 대상으로 쿼리를 작성해야 함EntityManger.createQuery(jpql)
public List<Member> findByName(String name){
return em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
}
name
을 전달받아서 name
에 의해 멤버 데이터를 조회EntityMangerFactory
EntityManager
(1) JPQL을 실행하면 영속성 컨텍스트가 flush
됨
(2) JPQL로 조회한 엔티티는 영속 상태가 됨