1๏ธโฃ SQL ์ ์ง์ ๋ค๋ฃฐ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์
โ ๋ฐ๋ณต๋ ์ฝ๋
โก๏ธ DB ์ ๊ทผ์ Java ์ ์ปฌ๋ ์ ์ฒ๋ผ ์ง์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๋งค๋ฒ ๋ณต์กํ SQL ์ ์์ฑํ์ฌ JDBC API ๋ฅผ ํตํด ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ง๊ณ ์์ผ ํ๋ค.
// Java Collection ์ ๊ทผ๊ณผ JDBC API ๋ฅผ ํตํ DB ์ ๊ทผ ๋น๊ต
Member member = new Member(24,"young");
// Java Collection
list.add(member);
// DB
// (1) SQL ๋ฌธ ์์ฑ
String sql = "INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES(?,?)";
// (2) SQL ๋ณ์ ๊ฐ ๋์
pstmt.setString(1, membmer.getMemberId());
pstmt.setString(2, membmer.getName());
// (3) JDBC API ๋ฅผ ํตํด DB ์ ์์ฒญ ์ ์ก
pstmt.excuteUpdate(sql);
โก SQL ์ ์์กด์ ์ธ ๊ฐ๋ฐ
โก๏ธ ๊ฐ์ฒด์ ์์ ์ฌํญ์ด ์๊ธธ ๋๋ง๋ค ์์ฑํ SQL ๋ฌธ๋ ๊ณ์ ์์ ํด์ฃผ์ด์ผํ๋ค. ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง์๋ก ๊ด๋ จ ๋ฌธ์ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค. ์ด ๋ํ Java ์ปฌ๋ ์ ์์๋ ๊ฐ๋จํ ๋ฌธ์ ์ด๋ค.
# ๊ธฐ์กด SQL ๋ฌธ
SELECT MEMBER_ID, NAME FROM MEMBER WHERE MEMBER_ID=?
# Member ๊ฐ์ฒด์ TEL ์ด ์ถ๊ฐ๋ ์ํฉ
SELECT MEMBER_ID, NAME, TEL FROM MEMBER WHERE MEMBER_ID=?
// Java Collection ์์์ ์กฐํ ๋ฐ ์์
Member member = list.get(xxx); // ์กฐํ
member.setTel("xxx") // ์์
SQL ์ ์ง์ ๋ค๋ค์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์์ฝ
- ์ง์ ํ ์๋ฏธ์ ๊ณ์ธต ๋ถํ ์ด ์ด๋ ต๋ค.
- ์ํฐํฐ๋ฅผ ์ ๋ขฐํ ์ ์๋ค.
- SQL ์ ์์กด์ ์ธ ๊ฐ๋ฐ์ ํผํ๊ธฐ ์ด๋ ต๋ค.
โข JPA ์ ๋ฌธ์ ํด๊ฒฐ
โก๏ธ JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ๋, ๊ฐ๋ฐ์๊ฐ ์ง์ SQL์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ JPA๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ณ , ๊ทธ๋ฌ๋ฉด JPA ๊ฐ ๊ฐ๋ฐ์ ๋์ ์ ์ ์ ํ SQL์ ์์ฑํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฌํ๋ค. ๋ํ JPA ๋ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ์ ์ ํ SQL ์ ์คํํ๋ค.
// JPA CRUD API ์ ๋ฆฌ
// โ ์ ์ฅ (Create)
jpa.persist(member);
// โก ์กฐํ (Read)
String memberld = "hellold";
Member member = jpa.find(Member.class, memberld);
// โข ์์ (Update)
Member member = jpa.find (Member.class, memberId);
member.setName("์ด๋ฆ๋ณ๊ฒฝ");
// โฃ ์ฐ๊ด๋ ๊ฐ์ฒด ์กฐํ
Member member = jpa.find(Member.class, memberid);
Team team = member.getTeam();
2๏ธโฃ ํจ๋ฌ๋ค์์ ๋ถ์ผ์น
โ ์์
๐ด ๋ถ์ผ์น ์ํฉ
โก๏ธ ๊ฐ์ฒด์๋ '์์' ์ด๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ง๋ง ํ ์ด๋ธ์ '์์'์ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์๋๋ค.


โก๏ธ ITEM ์ ๊ณ ์ ๊ฐ์ฒด๋ฅผ ์ธ์ํ๋ ITEM_ID ๊ฐ PK (์ฃผํค_Primary Key) ๋ก ์๊ณ , ALBUM & MOVIE & BOOK ํ ์ด๋ธ์ด ITEM_ID ๋ฅผ FK (์ธ๋ํค_Foreign Key) ๋ก ํ์ฌ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ํํ์ด๋ค.
๐ต JPA ์์
โก๏ธ JPA ๋ ์์ ๊ฐ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค๋ค. ๊ฐ๋ฐ์๋ ๋จ์ํ JPA ์๊ฒ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ฉด ๋๋ค. JPA ์์๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋๋์ด ์ ์ฅํ๋ค.
// JPA ๋ฅผ ํตํ ๊ฐ์ฒด ์ ์ฅ
jpa.persist(album);
# ์คํ๋๋ SQL๋ฌธ
INSERT INTO ITEM ... ;
INSERT INTO ALBUM ... ;
โก ์ฐ๊ด๊ด๊ณ
โก๏ธ ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ์์ฉํด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์ฐธ์กฐ์ ์ ๊ทผํด์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ค. ๋ฐ๋ฉด, ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ์ฌ์ฉํด์ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์กฐ์ธ์์ฌ์ฉํด์ ์ฐ๊ด๋ ํ ์ด๋ธ์ ์กฐํํ๋ค.

// Java
member.getTeam( ); //member -> team ์ ๊ทผ
# SQL
SELECT M.*, T.*
FROM MEMBER M
JOIN TEAM T ON M . TEAM ID = T . TEAM ID
โข ๊ฐ์ฒด ๊ทธ๋ํ ํ์
โก๏ธ ํ ์ด๋ธ๋ผ๋ฆฌ ์ฐ๊ด๊ด๊ณ๊ฐ ์กด์ฌํ ๋ ๊ฐ์ฒด๋ฅผ ์์ ๋กญ๊ฒ ํ์ํ ์ ์์ด์ผํ์ง๋ง, SQL ๋ฌธ์ ๊ฒฝ์ฐ Join ์ ํตํด ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ๋ฒ์๋ฅผ ์ง์ ํด์ฃผ์ด์ผํ๋ค.
memberDAO.getMember () ; //Member๋ง์กฐํ
memberDAO.getMemberWithTeam() ; //Member์ Team ์กฐํ
memberDAO.getMemberWithOrderWithDelivery () ; //Member์ Order์ Delivery ์กฐํ
โก๏ธ ์ด๋ ๊ฒ ๋๋ฉด ๋งค๋ฒ DAO ์์ SQL ๋ฌธ์ ํ์ธํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ SQL ์ ์์กด์ ์ธ ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
๐ต JPA์ ๊ฐ์ฒด ๊ทธ๋ํ ํ์
โก๏ธ JPA๋ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ์ ์ ํ SELECT SQL์ ์คํํ๋ฏ๋ก ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ ๋ขฐํ๊ณ ๋ง์๊ป ์กฐํํ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ ์ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์์ ๊น์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๋ฅผ ๋ฏธ๋ฃฌ๋ค๊ณ ํด์ '์ง์ฐ ๋ก๋ฉ'์ด๋ผ ํ๋ค. JPA ๋ ์ง์ฐ ๋ก๋ฉ์ ํฌ๋ช ํ๊ฒ ์ฒ๋ฆฌํจ์ผ๋ก ๋ฐ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
โก๏ธ JPA๋ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ฆ์ ํจ๊ป ์กฐํํ ์ง ์๋๋ฉด ์ค์ ์ฌ์ฉ๋๋ ์์ ์ ์ง์ฐํด ์ ์กฐํํ ์ง๋ฅผ ๊ฐ๋จํ ์ค์ ์ผ๋ก ์ ์ํ ์ ์๋ค.
(JPA) ์ฆ์ ๋ก๋ฉ๊ณผ ์ง์ฐ ๋ก๋ฉ (FetchType.LAZY or EAGER)
โFetch Type JPA ๊ฐ ํ๋์ Entity ๋ฅผ ์กฐํํ ๋, ์ฐ๊ด๊ด๊ณ์ ์๋ ๊ฐ์ฒด๋ค์ ์ด๋ป๊ฒ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋๋ฅผ ๋ํ๋ด๋ ์ค์ ๊ฐ. ๋ ๊ฐ์ ์ ๋ต์ด ์กด์ฌํ๋ค. ์ฐ๊ด ๊ด๊ณ์ ์๋ Entity ๋ค ๋ชจ๋ ๊ฐ์ ธ์จ๋ค → EAGER ์
like099.tistory.com
โฃ ๋น๊ต
- ๋์ผ์ฑ : '==' ๋น๊ต, ๊ฐ์ฒด ์ธ์คํด์ค์ '์ฃผ์๊ฐ'์ ๋น๊ตํ๋ค.
- ๋๋ฑ์ฑ : 'equals()' ์ฌ์ฉ, '๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ'์ ๋น๊ต ํ๋ค.
// DAO
String memberid = "100";
Member memberl = memberDAO.getMember(memberid);
Member member2 = memberDAO.getMember(memberid);
System.out.println(memberl == member2) ; // ์ถ๋ ฅ : false
// Java Collection
Member memberl = list.get(0);
Member member2 = list.get(0);
Sytem.out.println(memberl == member2); // ์ถ๋ ฅ : true
// JPA
String memberid = "100";
Member memberl = jpa.find (Member.class, memberid);
Member member2 = jpa.find(Member.class, memberid);
Sytem.out.println(member1 == member2); // ์ถ๋ ฅ : true
3๏ธโฃ JPA ๋ ๋ฌด์์ธ๊ฐ?
โซ๏ธ ์ฉ์ด ์ ๋ฆฌ
- ORM(Object-Relational Mapping) : ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋งคํ
- JPA(Java Persistence API) : ์๋ฐ ์ง์์ ORM ๊ธฐ์ ํ์ค.

โ JPA ์๊ฐ

4๏ธโฃ
'JPA ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JPA] ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ Ch.5 (1) | 2023.05.19 |
|---|---|
| [JPA] ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ Ch.4 (0) | 2023.05.08 |
| [JPA] ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ Ch.3 (0) | 2023.05.05 |
| [JPA] ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ Ch.2 (0) | 2023.04.15 |