JPA
๐JPA(Java Persistence API/Jakarta Persistence API)
- Java ์ง์์์ ์ฌ์ฉํ๋ ORM(Object-Relational Mapping) ๊ธฐ์ ์ ํ์ค ์ฌ์(๋๋ ๋ช ์ธ, Specification)
- Java์ ์ธํฐํ์ด์ค๋ก ์ฌ์์ด ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ JPA๋ผ๋ ํ์ค ์ฌ์์ ๊ตฌํํ ๊ตฌํ์ฒด๋ ๋ฐ๋ก ์๋ค๋ ๊ฒ์ ์๋ฏธ
- ๊ตฌํ์ฒด : ๐Hibernate ORM, EclipseLink, DataNucleus ๋ฑ
- Hibernate ORM์ JPA์์ ์ ์ํด๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด
- JPA์์ ์ง์ํ๋ ๊ธฐ๋ฅ ์ด์ธ์ Hibernate ์์ฒด์ ์ผ๋ก ์ฌ์ฉ API ์ญ์ ์ง์
๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต JPA ์์น
- JPA๋ ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต์ ์๋จ์ ์์น
- ๋ฐ์ดํฐ ์ ์ฅ, ์กฐํ ๋ฑ์ ์์ ์ JPA๋ฅผ ๊ฑฐ์ณ Hibernate ORM์ ํตํด ์ด๋ค์ง
- Hibernate ORM์ ๋ด๋ถ์ ์ผ๋ก JDBC API๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ
Persistence
JPA ์ P (Persistence)
- Persistence : ์์์ฑ, ์ง์์ฑ
- ๋ฌด์ธ๊ฐ๋ฅผ ๊ธ๋ฐฉ ์ฌ๋ผ์ง์ง ์๊ณ ์ค๋ ์ง์๋๊ฒ ํ๋ค
์์์ฑ ์ปจํ ์คํธ(Persistence Context)
- ORM : ๊ฐ์ฒด(Object)์ DB ํ ์ด๋ธ์ ๋งคํ์ ํตํด ์ํฐํฐ ํด๋์ค ๊ฐ์ฒด ์์ ํฌํจ๋ ์ ๋ณด๋ฅผ ํ ์ด๋ธ์ ์ ์ฅํ๋ ๊ธฐ์
- ์์์ฑ ์ปจํ
์คํธ : ํ
์ด๋ธ๊ณผ ๋งคํ๋๋ ์ํฐํฐ ๊ฐ์ฒด ์ ๋ณด
- ์ํฐํฐ ์ ๋ณด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์กฐํ, ์ญ์ ์ ์ฌ์ฉ
- 1์ฐจ ์บ์ : JPA์์ ์ํฐํฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณณ
- ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์ : DB์ ๋ณด๋ด์ง ์์ Query๋ฅผ ์ ์ฅํ ๊ณณ
JPA API
build.gradle ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
1
2
3
4
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
...
}
JPA ์ค์ (application.yml)
๐ddl-auto : ์ํฐํฐ ํ ์ด๋ธ ์๋ ์์ฑ
1
2
3
4
5
6
7
8
9
10
11
spring:
h2:
console:
enabled: true
path: /h2
datasource:
url: jdbc:h2:mem:test
jpa:
hibernate:
ddl-auto: create # (1) ์คํค๋ง ์๋ ์์ฑ
show-sql: true # (2) SQL ์ฟผ๋ฆฌ ์ถ๋ ฅ
์ํ ์ฝ๋ ์คํ ์ํ Config ์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
public class JpaBasicConfig {
private EntityManager em;
private EntityTransaction tx;
@Bean
public CommandLineRunner testJpaBasicRunner(EntityManagerFactory emFactory) {
this.em = emFactory.createEntityManager();
this.tx = em.getTransaction();
return args -> {
tx.begin();
Member member = new Member("hgd@gmail.com");
em.persist(member);
tx.commit();
Member resultMember = em.find(Member.class, 1L);
System.out.println("Id: " + resultMember.getMemberId() +
", email: " + resultMember.getMemberEmail());
}
}
JPA API Methods
Method | ์ค๋ช |
---|---|
em | EntityManager. EntityManagerFactory์์ createEntityManager ๋ฉ์๋ ํตํด ๊ฐ์ ธ์จ๋ค |
tx | EntityTransaction. EntityManager์์ getTransaction ๋ฉ์๋ ํต์ ๊ฐ์ ธ์จ๋ค |
tx.begin() | Transaction ์คํ ์ํ ๋ฉ์๋ |
em.persist() | ์์์ฑ ์ปจํ ์คํธ์ ์ํฐํฐ ์ ์ฅ |
tx.commit() | ๋ฉ์๋ ํธ์ถ ์ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ๋์ด์๋ ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฉ |
em.flush() | tx.commit() ๋ฉ์๋ ํธ์ถ ์ JPA ๋ด๋ถ์ ์ผ๋ก ํธ์ถ๋์ด ์์์ฑ ์ปจํ ์คํธ ๋ณ๊ฒฝ๋ด์ฉ์ DB์ ๋ฐ์ |
em.find(.class, ) | ์์์ฑ ์ปจํ ์คํธ์์ ๋ฐ์ดํฐ ์กฐํ |