- JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
- JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다.
- JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
그 말은 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.
JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.
ORM(Object-Relational Mapping)
우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면된다.
왜 JPA를 사용해야 할까?
JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다. 추가적으로 JPA는 네이티브 SQL이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다.
출처: https://dbjh.tistory.com/77#recentComments
- show-sql : JPA가 생성하는 SQL을 출력한다.
- ddl-auto : JPA는 테이블을 자동으로 생성하는 기능을 제공하는데 none 를 사용하면 해당 기능을 끈다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import jakarta.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
public class JpaMemberRepository implements MemberRepository{
//jpa는 EntityManager를 통해 모든 동작을 수행함
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
@Override
public Member save(Member member) {
//persist는 영구저장하다 라는 뜻
em.persist(member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
// id를 토대로 Member class에서 찾아서 member에 저장
Member member = em.find(Member.class, id);
return Optional.ofNullable(member); //값이 있으면 반환, 없으면 null 반환
}
//id와 같이 pk 기반이 아닌것들은 jpql을 작성해줘야함(createQuery)
@Override
public Optional<Member> findByName(String name) {
//쿼리를 만들어서 name과 일치하는 객체를 찾아서 조회
List<Member> result = em.createQuery("select m from Member as m Where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
//member entity를 조회해서 객체 자체를 select함
return em.createQuery("select m from Member as m", Member.class).getResultList();
}
}
jpa를 기반으로 만든 멤버 레포지토리이다.
jdbc에서는 datasource를 이용했다면, JPA에서는 EntityManager을 이용했다.
'Back End > Spring' 카테고리의 다른 글
Spring - AOP (0) | 2023.07.05 |
---|---|
Spring - DB접근6 (스프링 데이터 JPA) (0) | 2023.07.05 |
Spring - DB접근4 (JdbcTemplete) (0) | 2023.07.04 |
Spring - DB접근3 (스프링 통합 테스트) (0) | 2023.07.04 |
Spring - DB접근2 (고전 jdbc 이용) (0) | 2023.07.04 |