์คํฐ๋ ๋
ธํธ 12์ 15์ผ: JPA ๋ฐ JPA์์ ์ฐ์ด๋ XML ๋ฌธ์๊ฐ๋ฐ&IT/์น ๋ฐฑ์๋2023. 12. 17. 00:02
Table of Contents
JPA: Java Persistence API
- RDB์ ๊ตฌ์กฐ์ ๋ง๋๋ก ์๋ ์์ฑ
- ๊ถ์ฅ์ฌํญ
- ๋ณต์กํ ํ ์ด๋ธ ๊ด๊ณ ํ์ฑ ๋ฐ ์์ฑ์ SQL๋ฌธ์ผ๋ก ํ์.
- ๋งค์ฐ ๋ณต์กํ SQL๋ฌธ์ด ํ์ํ ๊ฒฝ์ฐ, JPA์ API๋ก๋ ํด๊ฒฐ ์ด๋ ค์ธ ์ ์์.
- ์ด๋ด ๋๋, JDBC API + ์์ SQL๋ฌธ + JPA + ...
- ๊ถ์ฅ์ฌํญ
- ์์ ์๋ฐ ์ฝ๋๋ก DDL (Create, Drop, Alter), DML () ์ฒ๋ฆฌ ๊ฐ๋ฅ.
- ๊ฐ๊ฐ์ ๊ธฐ๋ฅ ์ํ ๊ฐ๋ฅ ๋ฉ์๋๊ฐ ์กด์ฌ.
ํน์ง
- ์ฆ์ ์๊ตฌ์ฌํญ ๋ณ๋์ ๊ธฐ๋ฏผํ ๋์์ด ๊ฐ๋ฅ.
- ์ ํต์ ๋ฐฉ์:
DROP TABLE ...
==>CREATE TABLE ...
==> ๋ฐ์ดํฐ ์ด๊ด ==> ์๋ฐ ์์ค ์์ ==> ์ปดํ์ผ ... - JPA๋, ๊ทธ๋ฅ entity ํด๋์ค์ ๋ณ์๋ค ์์ ํ์ฌ ํ ์ด๋ธ ๊ตฌ์กฐ ๊ด๋ฆฌ ๊ฐ๋ฅ.
- ์ ํต์ ๋ฐฉ์:
- persistence.xml
- DB ์๋ฒ์ ์ ์ ์ ๋ณด (DB ์๋ฒ ๋๋ผ์ด๋ฒ, URL, ํฌ๋ ๋ด์ , ...)
- ์คํ๋ SQL๋ฌธ ์ข
๋ฅ ์ง์ , ๊ฐ๋
์ฑ ๊ณ ๋ ค, ๋ถ์ฐ ์ค๋ช
์์: XML ์์ ์ค'create'
: DDL, ์ด์ ์๋ฒ์์๋ ์ฐ์ง ๋ง๋ผ.'none'
: DML+SELECT
๋ง, ์ด์ ์๋ฒ์์๋ ์ด๊ฒ ๊ธฐ๋ณธ. - Table์ 1:1 ๋งคํ๋๋, ์ฆ table ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ Java์ entity ํด๋์ค ๋ฑ๋ก
- Eclipse์์ ์ค์ ๋ฐฉ๋ฒ:
persistence.xml
์ ํ ==> ๋ง์ฐ์ค์ฐํด๋ฆญ ==> JPA Tools ==> Synchronize Class List- Spring๋ก ๋์ด๊ฐ๋ฉด ์ด๋ฐ ๊ฒ๋ ์๋ํ ๊ฐ๋ฅ.
- Eclipse์์ ์ค์ ๋ฐฉ๋ฒ:
์ฃผ์ ์ ๋ ธํ ์ด์ ๋ค
@Entity
- Table๊ณผ 1:1 ๋งคํ
- Entity์ ํด๋์ค๋ฅผ ์๋ฏธ. ํด๋์ค ์ด๋ฆ์ด table ์ด๋ฆ์ผ๋ก ์๋ ์ ์ฉ.
- 1๊ฐ์ Entity ๊ฐ์ฒด๊ฐ table์ 1๊ฐ์ row์ ๋์.
@Column
- table์ ์ปฌ๋ผ๋ช ์ ์๋ฏธ
- ํด๋น ๋ณ์๋ช ์ด ์ปฌ๋ผ๋ช ์ผ๋ก ์๋์ผ๋ก ๋์.
- ๋จ, ์์ ๋ ๊ฐ๋ฅ.
- ์์:
name
์ด ์๋๋ผuser_name
์ด๋ฆ์ ์ปฌ๋ผ๋ช ์ผ๋ก ์์ฑ.@Column(name="user_name")
private String name;
@GeneratedValue
- MySQL์์์
AUTO_INCREMENT
๋๋ Oracle์Sequence
์ ๋์. - ์๋ฒ์ dialect๋ง๋ค ๋ฐฉ์์ด ๋ค๋ฆ.
์์: MySQL์์๋@GeneratedValue(strategy=GenerationType.IDENTITY)
- MySQL์์์
@Id
- PK ๋ฑ ์ค์ .
- DB์ ํ ์ด๋ธ์๋ PK๊ฐ ์์ ์๋ ์์์๋ ์ด๊ฑด ์๋ต ๋ถ๊ฐ๋ฅ.
- ์ฐธ๊ณ : ์์ฆ์ ์ฃผ๋ก
long
ํ์ ์ ์ฌ์ฉํ๋ค๋๋ผ.
DBUtil.java์ 3๊ฐ ํจํค์ง: EntityManager
, EntityManagerFactory
, Persistence
.
- ์ ์์ ์ ์ด / Connection ๊ฐ์ฒด ์์ฑ ๋ฐ ์ญ์ ๊ด๋ฆฌ
- ๋จ API์ด๋ฆ์ด ์์ JDBC์ ๋ฌ๋ฆฌ Entity์ฉ์ด ๋งคํ๋ API๋ช ์ผ๋ก ์ ์
- ์ฐธ๊ณ :
EntityManagerFactory
?EntityManager
๋ฅผ ๋ง๋๋ '๊ณต์ฅ'.- ์ ์๊ฐ์ฒด ์ ๊ด๋ฆฌ, ์ ์๊ฐ์ฒด ์ ๋ฐ์ ์ธ ๊ด๋ฆฌ.
- ์ด๋ ํ DB์ ์ด๋ค ID/PW ๋ฑ์ผ๋ก ์ ์ํ๋์ง ๋ฑ ์ ๋ณด๋ฅผ ๋ณด์ ํ๋ ๊ฐ์ฒด.
- Factory pattern ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ ํ์ .
์ฐธ๊ณ ์ฌํญ: ์ฉ์ด ์ ๋ฆฌ
- Framework vs. library
- Framework๋ ๊ตฌ์กฐ ๋ฐ ํ์์ ์ ์, ๊ทธ์ ๋ง๊ฒ ๊ฐ๋ฐํด์ผ ํจ.
- Library๋ ๊ธฐ๋ฅ๋ค์ ๋ชจ์. ๊ตฌ์กฐ ์ ์ฝ ์์ด ๋ฉ์๋๋ค์ ํ์ํ ๋ ํธ์ถ
- JDBC ๋ณด์ ==> Hibernate (ORM์ ์์กฐ) ==> JPA ==> Spring Data JPA
1. XML ๋ฌธ์์ ๊ฐ์
- XML ๋ฌธ์๋?
- XML (eXtensible Markup Language)์ ๋ฐ์ดํฐ์ ์ ์ฅ ๋ฐ ์ ์ก์ ๋ชฉ์ ์ผ๋ก ์ค๊ณ๋ ๋งํฌ์ ์ธ์ด.
- ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐ ์ฌ์ฉ. '๋ฐ์ ํ ๋ฐ์ดํฐ'.
- JPA์ persistence.xml
- ์คํ ์ ์ฉ์ ์ํ ํ์ธ ์ ํํ๋ฒ ์ค ์ผ๋ถ
- ์ ์ธ ํ์: + (1ํ~๋ฌดํ), *(0ํ~๋ฌดํ), ? (0ํ ๋๋ 1ํ)
createEntityManagerFactory
์ ํ๋ผ๋ฏธํฐ ์ฃผ์!
์์:Persistence.createEntityManagerFactory("dbinfo");
- ์คํ ์ ์ฉ์ ์ํ ํ์ธ ์ ํํ๋ฒ ์ค ์ผ๋ถ
@Unused :: โจ NOT FOUND PAGE ๐
์๋ ํ์ธ์.
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!