DOing
[JPA] JPQL์ด๋? ๋ณธ๋ฌธ
๐ฑ JPQL
: Java Persistence Query Language
: JPA์์ ์ ๊ณตํ๋ ์ฟผ๋ฆฌ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
: SQL์ ์ถ์ํํ ๊ฐ์ฒด์งํฅ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค.
: SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , JPQL์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
: JPQL์ ๊ฒฐ๊ตญ SQL๋ก ๋ฒ์ญ๋์ด ์คํ๋๋ค.
: JPQL์ SQL์ ์ถ์ํํด์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดํ์ง ์๋๋ค.
๐ฑ JPQL ๋ฌธ๋ฒ
select m from Member as m where m.age > 18
์ํฐํฐ์ ์์ฑ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง๋ง JPQL ํค์๋๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
ํ ์ด๋ธ ์ด๋ฆ์ด ์๋ ์ํฐํฐ ์ด๋ฆ(Member)์ ์ฌ์ฉํ๋ค.
๋ณ์นญ(m)์ ํ์์ด๋ค. as๋ ์๋ต๊ฐ๋ฅํ๋ค.
ํ๋ก์ ์
: select์ ์ ์กฐํํ ๋์์ ์ง์ ํ๋ ๊ฒ
: ๋์์๋ ์ํฐํฐ, ์๋ฒ ๋๋, ์ค์นผ๋ผ ํ์ ์ด ๊ฐ๋ฅํ๋ค.
๐ฑ ๋จ์ ๊ฐ ์กฐํ
select m.username, m.age from Member as m
1. Query ํ์ ์ผ๋ก ์กฐํ ->๋น์ถ
2. Object[] ํ์ ์ผ๋ก ์กฐํ
3. DTO๋ก ์กฐํ
- ํจํค์ง๋ช ์ ํฌํจํ ์ ์ฒด ํด๋์ค๋ช ์ ๋ ฅ
select new ํจํค์ง๋ช
.memberDTO(m.username, m.age) from Member as m
๐ฑ ์ํฐํฐ ํ๋์ ๋๊ฐ์ง ์ข ๋ฅ
1. ์ํ ํ๋
: ๋จ์ํ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํ๋
2. ์ฐ๊ด ํ๋
: ์ฐ๊ด๊ด๊ณ๋ฅผ ์ํ ํ๋
a. ๋จ์ผ ๊ฐ ์ฐ๊ด ํ๋ : @ManyToOne, @OneToOne๊ฐ์ด ๋์์ด ์ํฐํฐ
b. ์ปฌ๋ ์ ๊ฐ ์ฐ๊ด ํ๋ : @OneToMany, @ManyToMany๊ฐ์ด ๋์์ด ์ปฌ๋ ์
๐ฑ ๊ฒฝ๋ก ํํ์
.์ ์ฐ์ด์ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ฒ
- ์ํ ํ๋ : ๊ฒฝ๋ก ํ์์ ๋, ํ์ ์ด์ ๋ถ๊ฐ๋ฅ
- ๋จ์ผ ๊ฐ ์ฐ๊ด ํ๋ : ๋ฌต์์ inner join ๋ฐ์, ํ์ ๋ ๊ฐ๋ฅ
select m.team from Member as m
select m.team.name from Member as // ํ์ ๊ฐ๋ฅ
- ์ปฌ๋ ์ ๊ฐ ์ฐ๊ด ํ๋ : ๋ฌต์์ inner join ๋ฐ์, ํ์ x
select t.members from Team t // ํ์ ๋ถ๊ฐ๋ฅ
๋ฌต์์ ์กฐ์ธ ๋์ ๋ช ์์ ์กฐ์ธ์ ์ฌ์ฉํ์!
๋ฌต์์ ์กฐ์ธ์ ํญ์ ๋ด๋ถ์กฐ์ธ์ ํ๋ค. ์กฐ์ธ์ SQLํ๋์ ์ค์ํ ํฌ์ธํธ์ด๋ค. ๋ฌต์์ ์กฐ์ธ์ ์กฐ์ธ์ด ์ผ์ด๋๋ ์ํฉ์ ํ๋์ ํ์ธํ๋๊ฒ ํ๋ค๋ค. ์ ์ง/๋ณด์๊ฐ ํ๋ค๋ค๋ ๊ฒ์ด ํฐ ๋จ์ ์ด๋ค.
'JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] Fetch Join (1) | 2021.08.06 |
---|---|
[Querydsl] ํํ์ด๋ DTO๋ก ๊ฒฐ๊ณผ ๋ฐํํ๊ธฐ (0) | 2021.08.05 |
[Querydsl] ์๋ธ์ฟผ๋ฆฌ (0) | 2021.08.04 |
[Querydsl] Join (0) | 2021.08.04 |
[Querydsl] ์ ๋ ฌ, ํ์ด์ง, ์ง๊ณ ํจ์, ๊ทธ๋ฃน ํจ์ (0) | 2021.08.04 |