스프링 부트와 JPA 활용1 - 회원 도메인 개발 1 & JPQL
9565 단어 JPAJPQLSpringbootJPA
📌 스프링 부트와 JPA 활용1 - 회원 도메인 개발 1 & JPQL
인프런 - 스프링 부트와 JPA 활용1 by 김영한 을 기반으로 작성된 글입니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원 도메인 개발 목차
1. 회원 리포지토리 개발
2. 회원 서비스 개발
3. 회원 기능 테스트
회원 도메인 개발
- 구현 기능
- 회원 등록
- 회원 목록 조회
- 순서
- 회원 엔티티 코드 다시 보기
- 회원 리포지토리 개발
- 회원 서비스 개발
- 회원 기능 테스트
1. JPQL
JPQL 이란?
- 회원 등록
- 회원 목록 조회
- 회원 엔티티 코드 다시 보기
- 회원 리포지토리 개발
- 회원 서비스 개발
- 회원 기능 테스트
SQL을 추상화한, 엔티티 객체를 조회하는 객체지향쿼리
- SQL 은 테이블을 대상으로 쿼리 작성
- JPQL 은 Entity를 대상으로 쿼리 작성
DB 테이블에 직접 연결 하지 않고 JPA 엔티티에 대해 동작
결국 SQL로 번역되어 DB 에서 데이터 조회
JPQL 문법
- 대소문자 구분
- 엔티티와 속성 : 구분 O
- SQL 키워드(Select, from, where 등) : 구분 X
- 엔티티
- 테이블 이름이 아닌 엔티티 이름 사용
- @Entity(name="") 으로 설정
- 별칭 필수, as 생략 가능
2. 회원 리포지토리 개발
1) 회원 리포지토리 (MemberRepository.java)
💻 코드
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) 기능
- save() : JPA가 영속성 컨텍스트에 엔티티 객체 저장
- findAll() : 전체 회원 조회 쿼리
- findOne() : 특정 id 회원 조회 쿼리
- findName() : 특정 name 회원 조회 쿼리
- EntityManager 객체의 createQuery() : 쿼리 생성
- TypedQuery 객체의 getResultList() : JPQL에 의해 데이터 검색, List 타입 반환
- setParameter() : 데이터 동적 바인딩
3) 파라미터 바인딩 : setParameter()
- 이름 기준 파라미터 - 앞에
:
사용 - 위치 기준 파라미터 - 앞에
?
사용
주의! 직접 바인딩 시 SQL injection 위험
💡 만약 EntitiyManagerFactory를 주입하고 싶다면? (아래 코드 작성)
@PersistenceUnit
private EntityManagerFactory emf;
❗ 그러나 @PersistenceContext
에서 스프링이 EntityManager 를 생성해서
주입해주기 때문에 따로 작성하지 않아도 된다
Author And Source
이 문제에 관하여(스프링 부트와 JPA 활용1 - 회원 도메인 개발 1 & JPQL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@joajoa/스프링-부트와-JPA-활용1-회원-도메인-개발-1-JPQL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)