728x90
UMC ์ฑ ๋ฐ์นญ ํ๋ก์ ํธ์์
JPA๋ฅผ ์ฌ์ฉํ๊ธฐ๋กํ๋ค.
Jdbc๋ ์ฌ์ฉํด๋ดค์ง๋ง, JPA๋ ์ฒ์์ด๊ธฐ ๋๋ฌธ์
๊ณต๋ถํด๋ณด๊ณ ์ ํ๋ค. (Jdbc ์ฌ์ฉ๋ณด๋ค, Jpa ์ฌ์ฉํ๋๊ฒ ์ ๋ง ๊น๋ํด๋ณด์๋ค. ๊ทผ๋ฐ JPA๊ฐ ์ข ๋ ์ด๋ ค์ ๋ณด์ฌ,,,,,)
์ค๋ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐ๋ก, JPA๋ก Spring boot์ Entity ์์ฑํ๊ณ ๊ด๊ณ ์ค์ ํ๋ ๊ฒ!!
728x90
1. JPA: ORM(Object Relational Mapping) Framework
ORM์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์๋ก ํธํ๋์ง ๋๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ๊ฒ์ ์๋ฏธ
๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ
2. Spring boot ์์์ JPA
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์ง -> H2 Database
- JPA ์ค์
- Lombok ์ค์ -> JPA ์ค์ ๋ถํฐ Lombok ๊น์ง
3. JPA ๊ธฐ๋ณธ ์ด๋ ธํ ์ด์
1. ๊ฐ์ฒด์ ํ ์ด๋ธ ๋งคํ
1) @Entity
- ์ด๋ฆ
- ๊ธฐ๋ณธ ๊ฐ: ํด๋์ค ์ด๋ฆ
- @Entity(name="[EntityName]")
- ์ฃผ๋ก ๊ธฐ๋ณธ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
- JPA๋ฅผ ์ฌ์ฉํด์ ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ ๋ฐ๋์ @Entity ๋ฅผ ๋ถ์ฌ์ผ ํ๋ค.
- ํ๋ผ๋ฏธํฐ๊ฐ ์๋ public ๋๋ protected ์์ฑ์๊ฐ ํ์ํ๋ค.
- final class, interface, enum, inner ํด๋์ค๊ฐ ์๋ ๊ธฐ๋ณธ ํด๋์ค์ฌ์ผ ํ๋ค.
- ์ ์ฅํ ํ๋์ final์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
2) @Table
- ์ด๋ฆ
- ๊ธฐ๋ณธ ๊ฐ: ์ํฐํฐ ์ด๋ฆ ์ฌ์ฉ
- @Table(name="[TableName]")
- ์ฃผ๋ก ๊ธฐ๋ณธ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
- ์นดํ๋ก๊ทธ, Schema๋ ์นดํ๋ก๊ทธ์ ์คํค๋ง๋ฅผ ๊ฐ๊ฐ ๋งคํํ๋ค.
- niqueConstraints(DDL): DDL ์์ฑ ์์ ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด
- ์ํฐํฐ์ ์ฌ์ฉํ ํ ์ด๋ธ์ ์ง์ ํ๋ค.
2. ๊ธฐ๋ณธ ํค ๋งคํ
1) @Id
- ๊ธฐ๋ณธ ํค(Primary Key) Mapping.
3. ํ๋์ ์ปฌ๋ผ ๋งคํํ๊ธฐ
1) @GeneratedValue
- ์ด๋ฆ
- @GeneratedValue(strategy=GenerataionType.IDENTITY)
- ๊ธฐ๋ณธ ํค(PK)์ ์์ฑ์ ๋ต์ ๋งคํํ๋ ๊ฒ์ด๋ค.
- ์ง์ ํ ๋น VS ์๋ ์์ฑ
- ์ง์ ํ ๋น: ์ง์ ํ ๋น ์, @GeneratedValue ๋ง๊ณ @Id๋ง ์ฌ์ฉ
- ์๋์์ฑ : IDENTITY(๊ธฐ๋ณธํค ์์ฑ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์๊ฒ ์์), SEQUENCE, TABLE(ํค ์์ฑ ํ ์ด๋ธ ์ด์ฉ)
2) @Column
- ์ด๋ฆ
- ๊ธฐ๋ณธ ๊ฐ: ํด๋น ํ๋์ ์ด๋ฆ์ผ๋ก ๋งคํ
- @Column(name= "[columnId]"
- + nullable = true/false(null ์ ์ฝ์กฐ๊ฑด), length= (๊ธธ์ด ์ ์ฝ ์กฐ๊ฑด)
3) @Enumerated
- Enum Type: ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ(final static String ๋ณด์ํ๊ธฐ ์ํด ๋์จ ๊ฒ) -> [์ถ์ฒ]
- ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(๋จ์ OR ์ฌ์, Yes OR No) ->[์ถ์ฒ]
- ์ด๊ฑฐํ
- ์ฝ๋๊ฐ ๋จ์ํด์ง๊ณ , ๊ฐ๋ ์ฑ์ด ์ข๋ค.
- ์ธ์คํด์ค ์์ฑ๊ณผ ์์์ ๋ฐฉ์ง, ์์ ํ์ ์์ ์ฑ ๋ณด์ฅ
- ์๋ก์ด ์์๋ค์ ํ์ ์ ์ ์ํจ์ผ๋ก ์ ์ํ ํ์ ์ด์ธ์ ํ์ ์ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ์ ์ปดํ์ผ์ ์ฒดํฌ
- ํค์๋ enum์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ ์๋๊ฐ ์ด๊ฑฐ์์ ๋ถ๋ช
- ์ด๋ฆ
- ๊ธฐ๋ณธ ๊ฐ: ํด๋น ํ๋์ ์ด๋ฆ์ผ๋ก ๋งคํ
- @Enumerated.ORDINAL : Enum ์์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ -> ์ฃผ๋ก ์ฌ์ฉํ์ง ์์
- @Enumerated.STRING : Enum ์ด๋ฆ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ -> ์ด๊ฒ์ผ๋ก ์ฌ์ฉํ๊ธฐ
4) @Temporal
- ๋ ์ง๋ฅผ ๋ํ๋ด์ฃผ๋ ์ด๋ ธํ ์ด์ -> [์ถ์ฒ]
- ์ด๋ฆ
- @Temporal(TemporalType.DATE)
- @Temporal(TemporalType.TIME)
- @Temporal(TemporalType.TIMESTAMP)
- @Temporal ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ง ์์ ๋์๋ DATE Type์ ๊ธฐ๋ณธ ๊ฐ์, TimeStamp์ด๋ค.
4) @Lob (= Large Object)
- varchar ๋์ด์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ์ง์ ํ ์ ์๋ ์์ฑ์ ์๋ค.
5)@Transient -> [์ถ์ฒ]
- ์ํฐํฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ์ ํ ์ด๋ธ์ ์ปฌ๋ผ(column)๊ณผ ๋งคํํ๊ณ ์๋ ๊ด๊ณ๋ฅผ ์ ์ธํ๊ธฐ ์ํด ์ฌ์ฉ --> ์์ ๋์์์ ์ ์ธํ๊ธฐ ์ํด
- method ์์ ์ ์ธ์, setter๊ฐ ์๋ getter์์ ํด์ค์ผ ํจ
728x90