[ 구현 기능 ]
- 회원 등록
- 회원 단건 조회
- 회원 다건 조회
- 회원 이름으로 조회
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로 조회한 엔티티는 영속 상태가 됨
