728x90
728x90
※ 본 포스팅은 김영한 강사님의 인프런 '실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발' 강의를 들으며 작성한 수강일지 입니다.
| 회원 도메인 개발
구현 기능
- 회원 등록
- 회원 목록 조회
순서
- 회원 엔티티 코드 다시 보기
- 회원 레포지토리 개발
- 회원 서비스 개발
- 회원 기능 테스트
1. 회원 리포지토리 개발
2. 회원 서비스 개발
3. 회원 기능 테스트
1. 회원 리포지토리 개발
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 // componenet scan의 대상이 되서 자동으로 관리 됨
public class MemberRepository {
@PersistenceContext // JPA의 entity manager를 주입해 줌
private EntityManager em;
// // 직접 주입하고 싶다면
// @PersistenceUnit
// private EntityManagerFactory emf;
public void save(Member member) {
em.persist(member); // persist -> 영속성 컨텍스트에 Member 객체를 넣음 -> transaction commit 시점에 db에 반영(insert)
}
// 단건 조회
public Member findOne(Long id) {
return em.find(Member.class, id); // JPA의 find method를 사용 -> 단건 조회, type, pk 넣어주기
}
// 리스트 조회
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class) // JPQL cf) SQL과 문법은 같으나 from의 대상이 table이 아니라 entity
.getResultList();
}
public List<Member> findByName(String name) {
return em.createQuery("select m from Member m where m.name = :name", Member.class) // parameter 바인딘 -> 특정 이름으로 조회
.setParameter("name", name) // parameter가 바인딩 됨
.getResultList();
}
}
기술 설명
- @Repository: 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 에외 변환
- @PersistenceContext: 엔티티 메니저(EntityManager) 주입
- @PersistenceUnit: 엔티티 매니저 팩토리(EntityManagerFactory) 주입
기능 설명
- save()
- findOne()
- findAll()
- findByName()
JPQL vs SQL
- 기능적으로는 동일
- 차이점 : SQL은 테이블을 대상으로, JPQL은 Entity 객체를 대상으로 한 쿼리(Entity Member를 조회)
728x90
728x90