๊ด€๋ฆฌ ๋ฉ”๋‰ด

DOing

[JPA] JPQL์ด๋ž€? ๋ณธ๋ฌธ

JPA

[JPA] JPQL์ด๋ž€?

mangdo 2021. 8. 8. 14:33

 

๐ŸŒฑ 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ํŠœ๋‹์˜ ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ด๋‹ค. ๋ฌต์‹œ์  ์กฐ์ธ์€ ์กฐ์ธ์ด ์ผ์–ด๋‚˜๋Š” ์ƒํ™ฉ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•˜๋Š”๊ฒŒ ํž˜๋“ค๋‹ค. ์œ ์ง€/๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๋‹ค๋Š” ๊ฒƒ์ด ํฐ ๋‹จ์ ์ด๋‹ค.