반응형
1. JPA란
**JPA(Java Persistence API)**는 자바에서 관계형 데이터베이스를 객체지향적으로 다룰 수 있도록 도와주는 ORM(Object-Relational Mapping) 표준 명세입니다.
즉, 복잡한 SQL 없이도 자바 객체와 데이터베이스 테이블 간의 매핑과 쿼리 작성을 가능하게 해줍니다.
Hibernate, EclipseLink, OpenJPA 등은 JPA의 구현체입니다.
Spring Data JPA는 이 위에 얹혀진 추상화 프레임워크입니다.
2. JPA 동작 방식 (PURE JAVA 환경)
1. Persistence가 persistence.xml을 읽고 EntityManagerFactory를 생성
- EntityManagerFactory는 애플리케이션 전체에서 하나만 생성해야함
2. EntityManagerFactory로부터 EntityManager를 생성
- EntityManager는 데이터베이스와의 실제 작업을 담당
- 한 트랜잭션당 하나씩 생성해서 사용 후 반드시 close
- 스레드간 공유 X
3. EntityTransaction을 통해 트랜잭션 시작 및 종료
[코드 예시]
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="jakarta.persistence.jdbc.user" value="user"/>
<property name="jakarta.persistence.jdbc.password" value="password"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<!-- <property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
memeber 엔티티
package hellojpa;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Member {
@Id
private Long id;
private String name;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setId(Long id) {
this.id = id;
}
}
main.java
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
[Spring boot 환경 예시]
- persitence.xml에 설정한 내용을 yaml파일로 쉽게 대체 가능하다.
- trasaction 작업을 어노테이션으로 대체 가능하다.
application.yaml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/test
driver-class-name: org.h2.Driver
username: sa
password:
# 기존xml을 yaml 설정으로 대체가능
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
service
@Service
public class MemberService {
@PersistenceContext
private EntityManager em;
@Transactional
public void createMember() {
Member member = new Member();
member.setId(1L);
member.setName("SpringBootMember");
em.persist(member);
}
}
반응형
'프로그래밍 > JPA' 카테고리의 다른 글
[JPA] 필드와 컬럼 매핑 (1) | 2025.06.19 |
---|---|
[JPA] 데이터베이스 스키마 자동 생성 (0) | 2025.06.19 |
[JPA] 객체와 테이블 매핑 (0) | 2025.06.19 |
[JPA] JPA의 영속성 관리2 (0) | 2025.06.10 |
[JPA] JPA 의 영속성 관리 (0) | 2025.06.10 |