JPA의 이해
자바 프로그램에서 관계형 데이터베이스에 접근하는 방식을 명세화한 인터페이스이다. 자바 진영의 ORM(Object Relational Mapping) 기술 표준이다.
JPA는 객체 지향적인 접근 방식을 사용하여 데이터베이스와 상호작용할 수 있도록 지원하며, 이를 통해 데이터베이스의 데이터를 자바 객체로 매핑하고 객체를 데이터베이스에 저장, 조회, 수정, 삭제할 수 있다.
JPA는 데이터베이스의 특정 테이블을 자바 클래스에 매핑하고, 해당 클래스의 인스턴스를 데이터베이스 레코드로 저장하는 등의 작업을 수행합니다. 이 과정에서 데이터베이스 연결 및 SQL 쿼리 실행 등은 JPA 내부에서 JDBC를 사용하여 처리된다.
따라서 JPA를 사용하려면 JPA를 구현한 특정 라이브러리(예: Hibernate, EclipseLink 등)와 함께 데이터베이스가 필요하며, 해당 데이터베이스에 접속하기 위해 JDBC 드라이버도 필요합니다. JPA를 사용하면 애플리케이션 개발자가 직접 JDBC 코드를 작성하지 않아도 되므로 개발 생산성을 향상시키고, 객체 지향적인 코드 작성이 가능하다.
JPA 사용
우선 프로젝트에서 다음 링크와 같이 간단히 설정해 준다.
pom.xml
persistence.xml
CREATE TABLE customer_tb (
id VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
registerDate BIGINT NOT NULL,
PRIMARY KEY(id)
);
package jpa01.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
@Data
@Entity // JPA 에게 이 객체가 데이터를 쓰기위한 객체임을 표시
@Table(name = "customer_tb") // 어떤 테이블에 데이터를 넣을지 표시
public class Customer {
@Id // PK 표시
private String id;
private String name;
private long registerDate;
public Customer (String id, String name) {
this.id = id;
this.name = name;
this.registerDate = System.currentTimeMillis();
}
public static Customer sample (){
return new Customer ( "ID0001", "Kim");
}
}
package jpa01;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import jpa01.entity.Customer;
public class CustomerJpa {
public static void main(String[] args) {
// persistence.xml 파일에 저장한 persistence unit 이름으로 설정
EntityManagerFactory emf = Persistence.createEntityManagerFactory("customer-exam");
EntityManager em= emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin(); // 이 코드 이후로 데이터작업이 가능
em.persist(Customer.sample());
tx.commit();
// 모든 작업 이후 em, emf 닫기
em.close();
emf.close();
}
}
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate:
/* insert jpa01.entity.Customer
*/ insert
into
customer_tb (name, registerDate, id)
values
(?, ?, ?)
요약하자면 main 메서드에서
1. EntityManagerFactory 를 통해 EntityManager 를 얻어오고
2. EntityManager의 getTransaction() 메서드로 트랜잭션을 불러온다.
3. 트랜잭션의 begin() 메서드로 트랜잭션을 시작
4. 트랜잭션 시작 시작이후 EntityManager 로 데이터 작업을 수행 후tx.commit(); 로 커밋을 혹은 롤백을 진행
(EntityManager 가 작업을 수행할때 Hibernate가 자동으로 hibernate 와 같이 쿼리를 생성해준다. )
5. 마지막으로 관련 리소스를 닫는다.
좋은 글이네요. 공유해주셔서 감사합니다.