Home
>
Spring
>
π[Spring] JPAλ₯Ό νμ©νμ¬ κ°μ²΄μ§ν₯μ μΌλ‘ κ°λ°νλ€λ μλ―Έ.
Spring
Framework
π[Spring] JPAλ₯Ό νμ©νμ¬ κ°μ²΄μ§ν₯μ μΌλ‘ κ°λ°νλ€λ μλ―Έ.
JPA(Java Persistence API)λ₯Ό νμ©νμ¬ κ°μ²΄μ§ν₯μ μΌλ‘ κ°λ°νλ€λ μλ―Έλ, λ°μ΄ν°λ² μ΄μ€μ ν
μ΄λΈμ μ§μ λ€λ£¨λ λ°©μμμ λ²μ΄λ, κ°μ²΄ μ§ν₯μ μΈ κ°λ
μ μ¬μ©ν΄ λ°μ΄ν°μ κ΄κ³λ₯Ό κ΄λ¦¬νλ κ²μ λ§ν©λλ€.
JPAλ₯Ό νμ©νλ©΄ λ°μ΄ν°λ² μ΄μ€μ κ°μ²΄ λͺ¨λΈ κ°μ κ°κ·Ήμ μ€μ¬ λ μ§κ΄μ μ΄κ³ μ μ°ν μ½λ μμ±μ΄ κ°λ₯ν΄μ§λλ€.
μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ μμ
μ νλ©΄μλ κ°μ²΄μ§ν₯ μ€κ³μ μμΉμ λ°λ₯Ό μ μμ΅λλ€.
1οΈβ£ μ£Όμ κ°λ
κ³Ό νΉμ§.
1οΈβ£ μν°ν°μ κ΄κ³ μ€μ¬ μ€κ³.
JPAλ λ°μ΄ν°λ² μ΄μ€μ ν
μ΄λΈμ μλ° κ°μ²΄(μν°ν°)λ‘ λ§€ννλ©°, ν
μ΄λΈ κ°μ κ΄κ³λ₯Ό κ°μ²΄ κ°μ κ΄κ³λ‘ λνλ
λλ€.
μλ₯Ό λ€μ΄, @OneToMany
, @ManyToOne
, @OneToOne
λ±μ μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ κ°μ²΄ κ°μ μ°κ΄ κ΄κ³λ₯Ό μ€μ νκ³ , μ΄λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μΈλ ν€, μ‘°μΈ λ±μ ν΅ν΄ ννν©λλ€.
2οΈβ£ κ°μ²΄μ§ν₯μ CRUD μμ
.
JPAλ EntityManagerλ CrudRepositoryμ κ°μ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κΈ°λ³Έμ μΈ CRUD μμ
(Create, Read, Update, Delete)μ λ©μλλ‘ μ 곡ν©λλ€.
κ°λ°μλ SQL 쿼리λ₯Ό μ§μ μμ±νλ λμ λ©μλ νΈμΆμ ν΅ν΄ λ°μ΄ν° μ‘°μμ μννλ©°, μ΄λ κ°μ²΄λ₯Ό μ‘°μνλ κ²κ³Ό μ μ¬ν©λλ€.
3οΈβ£ μΆμνλ λ°μ΄ν° μμΈμ€ κ³μΈ΅.
JPAλ λ°μ΄ν°λ² μ΄μ€ μ κ·Όμ μΆμννμ¬ νΉμ DBMSμ μ’
μλμ§ μλ μ½λλ₯Ό μμ±ν μ μλλ‘ ν©λλ€.
μ΄λ₯Ό ν΅ν΄ μ½λμ μ μ°μ±κ³Ό μ΄μμ±μ΄ λμμ§λ©°, λ°μ΄ν°λ² μ΄μ€λ₯Ό λ³κ²½ν΄μΌ ν κ²½μ°μλ μ΅μνμ μμ μΌλ‘ λμ²΄κ° κ°λ₯ν©λλ€.
4οΈβ£ μμμ± μ»¨ν
μ€νΈ(Persistence Context)
JPAλ μν°ν°λ₯Ό μμμ± μ»¨ν
μ€νΈλ‘ κ΄λ¦¬νμ¬ 1μ°¨ μΊμλ₯Ό νμ©ν μ΅μ νλ₯Ό μ 곡ν©λλ€.
λμΌν νΈλμμ
λ΄μμλ λμΌν κ°μ²΄λ₯Ό λ°ννμ¬ κ°μ²΄ μΌκ΄μ±μ μ μ§ν μ μμΌλ©°, μν°ν°κ° μμμ± μ»¨ν
μ€νΈμ μλ λμ μλμΌλ‘ λ³κ²½ μ¬νμ΄ κ°μ§λκ³ λ°μλ©λλ€.
5οΈβ£ κ°μ²΄μ§ν₯ 쿼리 μΈμ΄(JPQL)
JPAλ JPQL(Java Persistence Query Language)μ μ¬μ©νμ¬ κ°μ²΄μ§ν₯μ 쿼리 μμ±μ΄ κ°λ₯ν©λλ€.
JPQLμ SQLκ³Ό μ μ¬νμ§λ§ ν
μ΄λΈκ³Ό 컬λΌμ΄ μλ μν°ν°μ νλλ₯Ό λμμΌλ‘ μλνμ¬, λ°μ΄ν°λ² μ΄μ€κ° μλ μλ° κ°μ²΄λ₯Ό λ€λ£¨λ λ°©μμΌλ‘ 쿼리λ₯Ό μμ±ν μ μμ΅λλ€.
6οΈβ£ μ§μ° λ‘λ©(Lazy Loading)
JPAλ μ°κ΄λ μν°ν°λ₯Ό νμν μμ μ λ‘λνλ μ§μ° λ‘λ©μ μ§μνμ¬ κ°μ²΄ κ·Έλνλ₯Ό ν¨μ¨μ μΌλ‘ λ‘λν μ μλλ‘ ν©λλ€.
λΆνμν 쿼리 μ€νμ μ€μ΄κ³ μ±λ₯μ μ΅μ νν μ μμΌλ©°, νμν λλ§ μ°κ΄λ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ μ μμ΅λλ€.
2οΈβ£ JPAμ κ°μ²΄μ§ν₯ κ°λ° μ₯μ .
1οΈβ£ λμ κ°λ
μ±.
μ½λκ° κ°μ²΄ μ€μ¬μΌλ‘ ꡬμ±λλ―λ‘ κ°λ
μ±μ΄ λμμ Έ λλ©μΈ λͺ¨λΈμ λͺ
ννκ² μ΄ν΄ν μ μμ΅λλ€.
2οΈβ£ λΉμ¦λμ€ λ‘μ§μ μ§μ€.
SQL μμ±μ΄λ λ°μ΄ν°λ² μ΄μ€ λ§€ν μ½λ μμ±μ μκ°μ λ λ€μ΄κ³ , λΉμ¦λμ€ λ‘μ§μ μ§μ€ν μ μμ΅λλ€.
3οΈβ£ μ¬μ¬μ©μ± λ° μ μ§λ³΄μμ± μ¦κ°.
κ°μ²΄ μ§ν₯μ μΈ κ³μΈ΅ κ΅¬μ‘°λ‘ κ΅¬μ±νμ¬ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ΄ λμμ§λλ€.
4οΈβ£ μμ
JPAλ₯Ό μ¬μ©νλ©΄ μλμ κ°μ ν
μ΄λΈ μ€μ¬μ΄ μλ κ°μ²΄ μ€μ¬μ μ€κ³λ₯Ό ν μ μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€ κΈ°λ° κ°λ°
-- λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈ μ μ
CREATE TABLE employee (
employee_id BIGINT AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR ( 50 ),
department_id BIGINT ,
FOREIGN KEY ( department_id ) REFERENCES department ( department_id )
)
JPA κ°μ²΄μ§ν₯ κ°λ°
@Enity
public class Employee {
@Id
@GeneratedValue ( stratege = GenerationType . IDENTITY )
private Long id ;
private String name ;
@ManyToOne
@JoinColumn ( name = "department_id" )
private Department department ;
// getters and setters
}
κ°μ²΄μ§ν₯μ μΌλ‘ κ°λ°ν κ²½μ°, λ°μ΄ν°λ² μ΄μ€ μ€μ¬μ΄ μλ λΉμ¦λμ€ λ‘μ§ μ€μ¬μΌλ‘ μ½λλ₯Ό μ€κ³ν μ μμ΄, λλ©μΈ λͺ¨λΈκ³Ό λ°μ΄ν°λ² μ΄μ€ κ°μ λΆνμν λ§€ν 볡μ‘μ±μ μ€μ΄κ³ , μ½λκ° λ μ§κ΄μ μ΄κ³ νμ₯ κ°λ₯νκ² λ©λλ€.