회원 레퍼지토리 개발

2023. 5. 10. 07:52카테고리 없음

package jpabook.jpashop.repository;

import jakarta.persistence.Entity;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jpabook.jpashop.domain.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@RequiredArgsConstructor
public class MemberRepository {

    //스프링부트가 알아서 Autowired를 사용함.
    private final EntityManager em;
    // EntityManager : 데이터베이스랑 작업을 하게 되는데, findAll이나

    public void save(Member member) { // persist 하면 트랜젝션이 커밋되는 시점에서 db에 반영이 됨.(insert query)
        em.persist(member);

    }

    public Member findOne(Long id) {
        return em.find(Member.class, id);//첫번째는 타입이고 두번째는 PK를 넣어주면 됨.
    }

    public List<Member> findAll() {
        return em.createQuery("select m from Member m", Member.class) //jpql의 문법은 sql과 같은데 
        // 이제 from으로 넘어오는 상대가 tabled이 아니라 entity가 넘어오면 됨.
        //sql은 테이블을 대상으로 query를 함, jpql은 엔티티 객체에 대해 query를 함.
                .getResultList();
    }

    public List<Member> findByName(String name) { // 파라미터를 name으로 넘기고,
        return em.createQuery("select m from Member m where m.name = :name",//바인딩..?
                        Member.class)
                .setParameter("name", name)
                .getResultList();
    }
}

출처 : 인프런 강의: 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard