μν΄
/
Back-End
/
JPA
Search
Duplicate
Share
JPA
JPA
β’
JPA
β’
JPA μ£Όμ κ΅¬μ± μμ
β’
JPA μ₯μ
β’
JPA vs MyBatis
β’
JPA μ£Όμ κΈ°λ₯
JPAλ?
JPA(Java Persistence API)λ μλ° μ§μμ ORM κΈ°μ νμ€μ λλ€. JPAλ₯Ό μ¬μ©νλ©΄ κ°λ°μκ° μ§μ SQLμ μμ±νμ§ μκ³ λ λ°μ΄ν°λ² μ΄μ€λ₯Ό κ°μ²΄μ§ν₯μ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
JPA μκ°
ORM(Object-Relational Mapping)
κ°μ²΄μ ν μ΄λΈμ 1:1λ‘ λ§€ννμ¬ SQLμ μ§μ μ¬μ©νμ§ μκ³ λ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ‘°μν μ μλλ‘ λμμ£Όλ κΈ°μ μ λλ€.
β’
Persistence Framework
β’
ORM vs SQL Mapper
Persistence Framework
β’
ORM
ORM
μν°ν°(Entity)
@Entity μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μ μλ©λλ€.
κ° μν°ν°λ κ³ μ ν μλ³μ(@Id)λ₯Ό κ°μ§λ©°, λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ λ μ½λλ₯Ό μλ° κ°μ²΄λ‘ ννν©λλ€.
β’
μ£Όμ μ΄λ Έν μ΄μ
β’
μν°ν° μμ μ½λ
μ£Όμ μ΄λ Έν μ΄μ
μν°ν°
κ΄κ³ λ§€ν
JPA κ΄κ³ λ§€ν κ°λ
JPAμμ μν°ν° κ°μ κ΄κ³λ₯Ό μ€μ ν λ
μ°κ΄ κ΄κ³ λ§€ν
μ μ¬μ©ν©λλ€. κ΄κ³λ λ€μκ³Ό κ°μ΄ λΆλ₯λ©λλ€.
β’
1:1 (One-To-One)
β
@OneToOne
β’
1:N (One-To-Many)
β
@OneToMany
β’
N:1 (Many-To-One)
β
@ManyToOne
β’
N:M (Many-To-Many)
β
@ManyToMany
μ΄ μ€
1:N & N:1
κ΄κ³λ κ°μ₯ λ§μ΄ μ¬μ©λλ©°, μ€λ¬΄μμλ
μ€κ° ν μ΄λΈμ μ΄μ©ν Many-To-Many ν΄κ²° λ°©λ²
μ΄ μΌλ°μ μ λλ€.
κ΄κ³ λ§€ν
JPA μ£Όμ μ΄λ Έν μ΄μ
JPAμμ μμ£Ό μ¬μ©λλ μ΄λ Έν μ΄μ μ
κΈ°λ³Έ μν°ν°, κ΄κ³ λ§€ν, κΈ°ν κΈ°λ₯
μΌλ‘ λΆλ₯νμ¬ μ 리νμ΅λλ€.
μν°ν° κΈ°λ³Έ μ΄λ Έν μ΄μ
κ΄κ³ λ§€ν μ΄λ Έν μ΄μ
κΈ°ν μ£Όμ μ΄λ Έν μ΄μ
μ£Όμ μ΄λ Έν μ΄μ
JPQL (Java Persistence Query Language)
JPQL μ μ
νΉμ§
β’
SQLκ³Ό μ μ¬ν λ¬Έλ²μ μ¬μ©νμ§λ§
ν μ΄λΈμ΄ μλ μν°ν° κ°μ²΄λ₯Ό λμμΌλ‘ μ€ν
β’
λ°μ΄ν°λ² μ΄μ€ λ 립μ
μΌλ‘ μ¬μ© κ°λ₯
JPQL
Criteria API
SQLμ΄λ JPQLκ³Ό λ¬λ¦¬,
μλ° μ½λλ§μΌλ‘ 쿼리λ₯Ό μμ±
νκΈ° λλ¬Έμ μ»΄νμΌ μμ μμ μ€λ₯λ₯Ό μ‘μ μ μμΌλ©°,
λ©μλ 체μ΄λ λ°©μ
μΌλ‘ λμ 쿼리λ₯Ό μ½κ² 쑰립ν μ μμ΅λλ€.
Criteria API μ μ
νΉμ§
β’
JPQLκ³Ό λμΌν κΈ°λ₯μ μ 곡
νλ©΄μ
μ»΄νμΌ μμ μ μ€λ₯λ₯Ό νμΈ κ°λ₯
Criteria API
Querydsl
κΈ°μ‘΄ JPQLκ³Ό Criteria APIμ
볡μ‘ν μ½λ μμ±μ λ¨μν
νλ©΄μλ
κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμ¬μ£Όλ κΈ°λ₯
μ μ 곡ν©λλ€.
Querydsl μ μ
λμ 쿼리λ₯Ό κ°κ²°ν μ½λλ‘ μμ±
ν μ μμΌλ©°,
μ»΄νμΌ μμ μμ μ€λ₯λ₯Ό κ²μΆ
ν μ μμ΅λλ€.
Querydsl