[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 14. ํŽ˜์ด์ง• API / ์กฐ์ธ / ์„œ๋ธŒ ์ฟผ๋ฆฌ

2023. 3. 4. 16:05ยทSpring/Spring JPA ๊ธฐ๋ณธ

 

 

ํŽ˜์ด์ง• API

 

๋”๋ณด๊ธฐ

ํŽ˜์ด์ง•์ด๋ž€?

 

ํŽ˜์ด์ง•์ด๋ž€ ํ•œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.

 

ํŽ˜์ด์ง•์€ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ, ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ถ„์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์ ‘ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์›น ๊ฒŒ์‹œํŒ์ด๋‚˜ ์กฐํšŒ ํ™”๋ฉด์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

 

์กฐํšŒ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ 10๋งŒ ๊ฑด์ด๋ผ๋ฉด ํ•œ ํ™”๋ฉด์—์„œ ๋ชจ๋‘ ๋ณด์—ฌ ์ค„ ์ˆ˜๋Š” ์—†๋‹ค.

 

ํ•œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ํŽ˜์ด์ง•์ด๋‹ค. 

 

JPA ๋Š” ํŽ˜์ด์ง•์„ ๋‘ API๋กœ ์ถ”์ƒํ™”ํ•˜์˜€๋‹ค.

 

List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
        .setFirstResult(0)
        .setMaxResults(10)
        .getResultList();

 

setFirstResult(int startPosition) : ์กฐํšŒ ์‹œ์ž‘ ์œ„์น˜(0๋ถ€ํ„ฐ ์‹œ์ž‘)

 

setMaxResults(int maxResult) : ์กฐํšŒํ•  ๋ฐ์ดํ„ฐ ์ˆ˜ 

 

 

 

 

์กฐ์ธ(JOIN)

 

์กฐ์ธ ๊ธฐ์ดˆ ๊ฐœ๋…

๋”๋ณด๊ธฐ

 

์กฐ์ธ(JOIN)

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

 

๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ค€๋‹ค.

 

 

๋‚ด๋ถ€ ์กฐ์ธ(INNER JOIN)

๋‘ ํ…Œ์ด๋ธ”์— ๋‚ด๋ถ€ ์กฐ์ธ์„ ์ ์šฉํ•˜๋ฉด ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต์ ์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 

 

 

์™ธ๋ถ€ ์กฐ์ธ(OUTER JOIN)

๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ณ  ์™ผ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ์„ ์ ์šฉํ•˜๋ฉด ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ณ 

 

์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. 

 

 

 

๋‚ด๋ถ€ ์กฐ์ธ 

select m from Member m join m.team t

 

 

์™ธ๋ถ€ ์กฐ์ธ

select m from Member m left join m.team t

 

 

์„ธํƒ€ ์กฐ์ธ 

select m from Member m, Team t where m.username = t.name

 

 

 

ON ์ ˆ

 

์กฐ์ธ๋ฌธ์„ ์‚ฌ์šฉํ• ๋•Œ ON์ ˆ์„ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์กฐ๊ฑด์œผ๋กœ ํ…Œ์ด๋ธ” ์กฐ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

join ๋Œ€์ƒ์„ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์˜ˆ) ํšŒ์›๊ณผ ํŒ€์„ ์กฐ์ธํ•˜๋ฉด์„œ, ํŒ€ ์ด๋ฆ„์ด A์ธ ํŒ€๋งŒ ์กฐ์ธ

 

JPQL

select m,t from Member m left join m.team t on t.name ='A'

 

SQL

SELECT m.*, t.* FROM
Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'

 

 

 

์„œ๋ธŒ ์ฟผ๋ฆฌ 

select m from Member m
where m.age > (select avg(m2.age) from Member m2)

 

ํ•˜๋‚˜์˜ SQL ๋ฌธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ SQL ๋ฌธ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

 

 

์„œ๋ธŒ ์ฟผ๋ฆฌ ์ง€์› ํ•จ์ˆ˜

 

EXISTS

select m from Member m
where exists (select t from m.team t where t.name = ‘ํŒ€A')

 

exists(subquery) : ์„œ๋ธŒ์ฟผ๋ฆฌ์— ๊ฒฐ๊ณผ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ฐธ์ด๋‹ค. 

 

ํŒ€A ์†Œ์†์ธ ํšŒ์›

 

 

ALL

select o from Order o
where o.orderAmount > ALL (select p.stockAmount from Product p)

 

๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์ฐธ์ด๋‹ค.

 

์ „์ฒด ์ƒํ’ˆ ๊ฐ๊ฐ์˜ ์žฌ๊ณ ๋ณด๋‹ค ์ฃผ๋ฌธ๋Ÿ‰์ด ๋งŽ์€ ์ฃผ๋ฌธ๋“ค 

 

 

ANY

select m from Member m
where m.team = ANY (select t from Team t)

 

์กฐ๊ฑด์„ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜๋ฉด ์ฐธ์ด๋‹ค.

 

์–ด๋–ค ํŒ€์ด๋“  ํŒ€์— ์†Œ์†๋œ ํšŒ์› 

 

 

 

 

 

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ

'Spring > Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 15. JPQL - ํŽ˜์น˜ ์กฐ์ธ(fetch join)  (0) 2023.03.05
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 13. JPQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ• / ์ฟผ๋ฆฌ API  (0) 2023.03.04
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 12. ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(JPQL) ์†Œ๊ฐœ  (0) 2023.03.04
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 11. ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… / ๊ฐ’ ํƒ€์ž…  (0) 2023.03.03
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 10. ์˜์†์„ฑ ์ „์ด CASCADE / ๊ณ ์•„ ๊ฐ์ฒด  (0) 2023.03.01
'Spring/Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 15. JPQL - ํŽ˜์น˜ ์กฐ์ธ(fetch join)
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 13. JPQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ• / ์ฟผ๋ฆฌ API
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 12. ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(JPQL) ์†Œ๊ฐœ
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 11. ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… / ๊ฐ’ ํƒ€์ž…
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 14. ํŽ˜์ด์ง• API / ์กฐ์ธ / ์„œ๋ธŒ ์ฟผ๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”