์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- ๊ฒฝ๋ก ํํ์
- ํ์น ์กฐ์ธ 1 - ๊ธฐ๋ณธ
- ํ์น ์กฐ์ธ 2 - ํ๊ณ
- ๋คํ์ฑ ์ฟผ๋ฆฌ
- ์ํฐํฐ ์ง์ ์ฌ์ฉ
- Named ์ฟผ๋ฆฌ
- ๋ฒํฌ ์ฐ์ฐ
๊ฒฝ๋ก ํํ์ (์ค๋ฌด์์ ์ฌ์ฉ ๊ถ์ฅ X)
( ๊ฒฝ๋ก ํํ์์ผ๋ก ์ธํด ๋ฌต์์ ์ผ๋ก SQL ์กฐ์ธ(๋ด๋ถ ์กฐ์ธ) ๋ฐ์) - ๋์ค์ ํฐ ํผ๋์ ์ค ์ ์์.
๊ฒฝ๋ก ํํ์์ด๋ ?
.(์ )์ ์ฐ์ด ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ฒ
Member member = new Member();
String name = member.username; // *
์ฉ์ด ์ ๋ฆฌ
- ์ํ ํ๋(state field) : ๋จ์ํ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํ๋ (ex : m.username)
- ์ฐ๊ด ํ๋(association field) : ์ฐ๊ด๊ด๊ณ๋ฅผ ์ํ ํ๋
- ๋จ์ผ ๊ฐ ์ฐ๊ด ํ๋ : @ManyToOne, @OneToOne, ๋์์ด ์ํฐํฐ (ex : m.team)
- ์ปฌ๋ ์ ๊ฐ ์ฐ๊ด ํ๋ : @OneToMany, @ManyToMany, ๋์์ด ์ปฌ๋ ์ (ex : m.orders)
SELECT m.username -> ์ํ ํ๋
FROM Member m
join m.team t -> ๋จ์ผ ๊ฐ ์ฐ๊ด ํ๋
join m.orders o -> ์ปฌ๋ ์
๊ฐ ์ฐ๊ด ํ๋
WhERE t.name = 'ํA'
1. ์ํ ํ๋
๊ฒฝ๋ก ํ์์ ๋ ์ง์ . ๋ ์ด์์ ํ์์ X ๋ถ๊ฐ
select ๋ฅผ ๋ ๋ฒ ์กฐํ ํด์ m.username์ ๊ฐ์ ธ์๋ค.
2. ๋จ์ผ ๊ฐ ์ฐ๊ด ๊ฒฝ๋ก
๋ฌต์์ ๋ด๋ถ ์กฐ์ธ์ด ๋ฐ์(์ฑ๋ฅ์ ํฐ ์ง์ฅ์ ์ค๋ค), ํ์์ m.team.name ์ด๋ฐ ์์ผ๋ก ๊ฐ๋ฅ.
from ์ ์ ๋ณด๋ฉด, member๋ team์ด๋ ๋ด๋ถ ์กฐ์ธ์ด ๋ฐ์! ํ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค.
๊ฐ์ฒด ์ ์ฅ์์๋ .(์ )์ ์ด์ฉํด ์ ๊ทผํ๋ฉด ๋์ง๋ง, DB์ ์ฅ์์๋ join์ ํตํด ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
๋์ค์ ์ค๋ฌด์์ ์ฑ๋ฅ ํ๋ํ๋๋ฐ ์์ด์ ์์ฃผ ์ง๋ํ ์ํฅ์ ์ฃผ๊ฒ ๋๋ค.
3. ์ปฌ๋ ์ ๊ฐ ์ฐ๊ด ๊ฒฝ๋ก
๋ฌต์์ ๋ด๋ถ ์กฐ์ธ์ด ๋ฐ์ํ๋ค. ์ปฌ๋ ์ ์ ๋ ์ด์์ ํ์์ ๋ถ๊ฐ X, ํ ๊ฐ์ง ๊ฐ๋ฅํ ์ ์ t.members.size ์ปฌ๋ ์ ์ ์ฌ์ด์ฆ ์ ๋..
FROM ์ ์ ๋ช ์์ ์กฐ์ธ์ ํตํด ์ป์ ๋ณ์นญ์ผ๋ก ํ์ ๊ฐ๋ฅํจ. (์๋ ์ฝ๋ ์ฐธ์กฐ)
FROM ์ ์์ ๋ช ์์ ์กฐ์ธ์ ํตํด ์ป์ ๋ณ์นญ์ผ๋ก ์ํ ํ๋ ๊ฒฝ๋ก๋ก ํ์ํ๊ธฐ
์ด๋ ๊ฒ ํ๋ฉด ๋ช ์์ ์ผ๋ก ๋ด๋ถ ์กฐ์ธ(inner join)์ ์ฌ์ฉํ๋ฉด ๋์ค์ ์ฟผ๋ฆฌ ํ๋ํ๊ธฐ๋ ์ฝ๊ณ , ๋ฌต์์ ์กฐ์ธ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋์ค์ ์ด์ํ๋๋ฐ ํฐ ์ ๋ก์ฌํญ์ ์ค ์ ์๋ค.
๊ฒฐ๋ก : ๋ฌต์์ ์กฐ์ธ์ ์ฌ์ฉํ์ง ๋ง์.
๊ฒฝ๋ก ํํ์ ์์
select o.member.team from Order o -> O
select t.members from Team t -> O
select t.members.username from Team t -> X
select m.username from Team t join t.members m -> O
JPQL -> SQL
1. ์ํ ํ๋ ๊ฒฝ๋ก ํ์
// JPQL
select m.username, m.age from Member m
// SQL
select m.username, m.age from Member m
2. ๋จ์ผ ๊ฐ ์ฐ๊ด ๊ฒฝ๋ก ํ์
// JPQL
select o.member from Order o
// SQL
select m.*
from Orders o
inner join Member m on o.member_id = m.id
์ ๋ฆฌ
- ๊ฐ๊ธ์ ๋ฌต์์ ์กฐ์ธ ๋์ ์ ๋ช
์์ ์กฐ์ธ ์ฌ์ฉ
- ๋ฌต์์ ์กฐ์ธ์ ํญ์ ๋ด๋ถ ์กฐ์ธ๋ฐ์ ์๋๋ค.
- ์กฐ์ธ์ SQL ํ๋์ ์ค์ ํฌ์ธํธ์ด๋ค.
- ๊ฒฝ๋ก ํ์์ ์ฃผ๋ก SELECT, WHERE ์ ์์ ์ฌ์ฉํ์ง๋ง ๋ฌต์์ ์กฐ์ธ์ผ๋ก ์ธํด SQL์ FROM (JOIN) ์ ์ ์ํฅ์ ์ค.
- ๋ฌต์์ ์กฐ์ธ์ ์กฐ์ธ์ด ์ผ์ด๋๋ ์ํฉ์ ํ๋์ ํ์ ํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ๊ธ์ง!