인프런 - 스프링 부트와 JPA 활용1 by 김영한 을 기반으로 작성된 글입니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
SQL을 추상화한, 엔티티 객체를 조회하는 객체지향쿼리
- SQL 은 테이블을 대상으로 쿼리 작성
- JPQL 은 Entity를 대상으로 쿼리 작성
DB 테이블에 직접 연결 하지 않고 JPA 엔티티에 대해 동작
결국 SQL로 번역되어 DB 에서 데이터 조회
💻 코드
package jpabook.jpashop.repository;
import jpabook.jpashop.domain.Member;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import java.util.List;
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
//transaction이 commit 되는 시점에 DB에 반영 (insert 쿼리)
public void save(Member member){
em.persist(member);
}
/*특정 id 회원 조회*/
//find(entityClass, pk)
public Member findOne(Long id){
return em.find(Member.class, id);
}
/*전체 회원 조회*/
//Member : 회원 엔티티 객체
//createQuery(JPQL, 조회 타입)
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
/*특정 name 회원 조회*/
//이름 기준 파라미터 바인딩
public List<Member> findName(String name){
return em.createQuery("select m from Member m where m.name = :name ", Member.class)
.setParameter("name", name)
.getResultList();
}
}
👉 설명
1) 기술
@Repository
: 스프링 빈으로 등록 (Component 스캔 대상)@PersistenceContext
: 스프링이 EntityManager 생성해서 주입 (Injection)@PersistenceUnit
: EntityManagerFactory 주입 (Injection)2) 기능
3) 파라미터 바인딩 : setParameter()
:
사용?
사용💡 만약 EntitiyManagerFactory를 주입하고 싶다면? (아래 코드 작성)
@PersistenceUnit
private EntityManagerFactory emf;
❗ 그러나 @PersistenceContext
에서 스프링이 EntityManager 를 생성해서
주입해주기 때문에 따로 작성하지 않아도 된다