SQL 도 JPA 가 직접 만들어서 실행
해준다JPA는 인터페이스고, 구현체로는 여러가지가 있는데, 그 중 Hibernate 를 쓰겠다.
JPA는 자바 진영의 표준 인터페이스이고, 구현은 여러 벤더들이 하는 구조!
애노테이션들을 가지고, 데이터베이스와 매핑한다.
repository/JpaMemberRepository.java
JPA는 EntityManager
라는 것으로 모든 것이 동작을 한다.
아까 build.gradle 에서 data-jpa라이브러리를 다운받았잖아? 그러면 스프링 부트가 자동으로 EntityManager 를 생성해준다. 그래서 우리는 이 만들어진 것을 인젝션 받으면 된다.
repository/JpaMemberRepository.java
public class JpaMemberRepository implements MemberRepository{
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
@Override
public Member save(Member member) {
em.persist(member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class )
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
// 객체를 대상으로 쿼리를 날릴 수 있음
return em.createQuery("select m from Member m", Member.class).getResultList();
}
}