이 글은 김영한님의 '자바 ORM 표준 프로그래밍' 교재와 '실전! 스프링 부트와 JPA 활용' 강의를 바탕으로 정리한 글입니다. :)
이번 글에서는 실제로 동작하는 JPA 소스에 대해 간단히 살펴보겠습니다. 😚
JPA 테스트 시 사용될 기본적인 프로젝트 세팅은 https://start.spring.io/ 페이지에서 진행할 수 있습니다.
JPA를 사용하려면 가장 먼저 클래스와 테이블을 매핑해야 한다.
예시로 아래와 같은 회원 테이블과 있다고 가정해보자.
create table member
(
member_id bigint not null primary key,
name varchar(255) null,
city varchar(255) null,
street varchar(255) null,
zipcode varchar(255) null
);
회원 클래스에 JPA가 제공하는 매핑 어노테이션이 추가해 테이블을 표현할 수 있다.
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name="member_id")
private Long id;
private String name;
@Embedded
private Address address;
@OneToMany(mappedBy = "member")
private List<Order> orderList = new ArrayList<>();
}
객체 매핑이 된 테이블과 클래스의 관계는 아래와 같이 나타난다.
실제로 JPA를 이용하는 간단한 코드를 알아보도록 하자.
EntityManager em;
String memberId = "user1";
Member member = new Member();
member.setId(memberId);
member.setName("James");
member.setId(20);
// 등록
em.persist(member);
// 조회
Member findMember = em.find(Member.class, memberId);
// 수정
member.setAge(21);
// 삭제
em.remove(member);
수정의 경우 별도의 엔티티 매니저 함수를 이용하지 않고 단순히 엔티티의 값만 변경했다. JPA는 어떤 엔티티가 변경되었는지 추적하는 기능을 갖추고 있기에 엔티티의 값만 변경하면 자동으로 UPDATE문을 생성해 데이터베이스의 값을 변경한다.
엔티티 매니저는 엔티티의 등록, 조회, 삭제와 같은 기본적인 함수를 제공하기에 개발자는 SQL을 작성할 필요없이 이 함수를 이용하면 된다. 실제 SQL은 JPA가 자동으로 생성해 데이터베이스에 넘겨준다.
위에서 예시로 든 예제는 엔티티 매니저의 함수를 통해 처리 가능한 단순한 코드였다. 하지만 실제 실무에서는 위 함수로 처리할 수 없는 복잡한 로직을 만들어야할 경우가 생긴다.
이에 JPA는 엔티티 객체를 대상으로 쿼리하는 JPQL을 제공한다.
EntityManager em;
List<Member> memberList = em.createQuery("select m from Member m", Member.class)
.getResultList();
JPQL은 위와 같이 엔티티 매니저의 createQuery 함수를 통해 쿼리 객체를 생성하며 이를 getResultList()로 리턴한다.
읽어주셔서 감사합니다. 🙇