1οΈβ£ μ€λͺ
JPA λ μλ° νμ€ ORM(Object Relational Mapping) μ
ORM
- κ°μ²΄λ₯Ό
DBμ λ§€ν ν΄ μ€
JPA λ μΈν°νμ΄μ€λ‘μ μλ° νμ€λͺ
μΈμ
JPA λ₯Ό μ¬μ©νκΈ° μν΄μλ ꡬνμ²΄κ° νμ
- λνμ μΌλ‘
Hibernate, Eclipse Link λ±μ΄ μμ
Spring μμ JPA λ₯Ό μ¬μ©ν λλ μ΄ κ΅¬ν체λ₯Ό μ§μ λ€λ£¨μ§ μμ
2οΈβ£ μ¬μ© μ΄μ
JPA <- Hibernate <- Spring Data JPA
- ꡬν체 κ΅μ²΄ μ©μμ± (
Hibernate μΈμ λ€λ₯Έ ꡬνμ²΄λ‘ μ½κ² κ΅μ²΄ ν μ μμ)
- μ μ₯μ κ΅μ²΄ μ©μμ± (κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ μΈμ λ€λ₯Έ μ μ₯μλ‘ μ½κ² κ΅μ²΄ ν μ μμ)
3οΈβ£ spring-boot-starter-data
- μ€νλ§ λΆνΈμ© Spring Data Jpa μΆμν λΌμ΄λΈλ¬λ¦¬
- μ€νλ§ λΆνΈ λ²μ μ λ§μΆ° μλμΌλ‘ JPA κ΄λ ¨ λΌμ΄λΈλ¬λ¦¬λ€μ λ²μ μ κ΄λ¦¬ν΄μ€
4οΈβ£ h2
- μΈλ©λͺ¨λ¦¬ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€
- λ³λμ μ€μΉ μμ΄ νλ‘μ νΈ μμ‘΄μ±λ§μΌλ‘ κ΄λ¦¬ κ°λ₯
- λ©λͺ¨λ¦¬μμ μ€νλκΈ° λλ¬Έμ μ ν리μΌμ΄μ
μ μ¬μμν λλ§λ€ μ΄κΈ°ν λ¨
- ν
μ€νΈ μ©λλ‘ λ§μ΄ μ¬μ©
5οΈβ£ @Entity
- ν
μ΄λΈκ³Ό λ§ν¬λ ν΄λμ€μμ λνλ
- κΈ°λ³Έκ°μΌλ‘ ν΄λμ€μ μΉ΄λ©μΌμ΄μ€ μ΄λ¦μ μΈλμ€μ½μ΄ λ€μ΄λ°(_)μΌλ‘ ν
μ΄λΈ μ΄λ¦μ λ§€μΉν¨ (ex.
SalesManager.java -> sales_manager table)
- μ λ
Setter λ₯Ό λ§λ€μ§ μμ
- μμ±μλ₯Ό ν΅ν΄ κ°μ μ±μ°λ κ²μ΄ κΈ°λ³Έμ μΈ κ΅¬μ‘°
- κ° λ³κ²½μ΄ νμν μ΄λ²€νΈκ° μμ κ²½μ° κ·Έμ λ§λ λ©μλλ₯Ό λ°λ‘ ꡬννλ κ²μ μ μ λ‘ ν¨
6οΈβ£ @Id
- ν΄λΉ ν
μ΄λΈμ
PK(primary key) νλλ₯Ό λνλ
7οΈβ£ @GeneratedValue
- PK μμ± κ·μΉμ λνλ
auto_increment κ°μ μ΅μ
μ μ€ μ μμ
- λ°μ μμ μ κ°μ΄ μ€νλ§ 2.0 μμλ
GenerationType.IDENTITY μ΅μ
μ μΆκ°ν΄μΌλ§ auto_increment κ° λ¨
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
8οΈβ£ @Column
- ν
μ΄λΈμ 컬λΌμ λνλ΄λ©° κ΅³μ΄ μ μΈνμ§ μμλ ν΄λΉ ν΄λμ€μ νλλ λͺ¨λ 컬λΌμ΄ λ¨
- κΈ°λ³Έκ° μΈμ μΆκ°λ‘ λ³κ²½μ΄ νμν μ΅μ
μ΄ μμΌλ©΄ μ¬μ©
9οΈβ£ Entity Repository
JPA μμλ DAO λμ Repository μΈν°νμ΄μ€λ₯Ό μμ±νλ©΄, μλμΌλ‘ @Entity ν΄λμ€μ DBλ₯Ό μ°κ²°νλ ꡬν체λ₯Ό λ§λ€μ΄μ μ°κ²°ν΄μ€
1οΈβ£0οΈβ£ @MappedSuperclass
@MappedSuperclass μ΄λ
Έν
μ΄μ
μ΄ λΆμ μΆμ ν΄λμ€λ₯Ό μμ ν κ²½μ° μΆμν΄λμ€μ νλλ 컬λΌμΌλ‘ μΈμν¨
1οΈβ£1οΈβ£ @EntityListeners(AuditingEntityListener.class)
Auditing κ°μ κΈ°λ₯μ ν¬ν¨μν΄
1οΈβ£2οΈβ£ @CreatedDate
Entity κ° μμ±λμ΄ μ μ₯λ λ μκ°μ΄ μλ μ μ₯ λ¨
1οΈβ£3οΈβ£ @LastModifiedDate
- μ‘°νν
Entityμ κ°μ λ³κ²½ν λ μκ°μ΄ μλ μ μ₯ λ¨
μΆμ²π
π μ€νλ§ λΆνΈμ AWSλ‘ νΌμ ꡬννλ μΉ μλΉμ€