implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
위 설정으로 JPA가 던지는 쿼리를 볼 수 있게 된다.
또 ddl-auto=none 설정으로 JPA가 자동으로 테이블을 생성하는 기능을 OFF 한다.
기존 도메인에 있는 객체를 Entity로 인식하게 하기 위해
어노테이션을 작성한다.
@Entity
이 또한 어노테이션으로 설정한다.
@Transactional
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
//DI 됨 (build.gradle)
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();
}
}
훨씬 간단해졌다.
JPA는 EntityManager를 DI 받는다.
EntityManager는