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

2023. 3. 4. 14:59ยทSpring/Spring JPA ๊ธฐ๋ณธ

 

JPQL - ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ

 

์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ 

 

JPQL ์€ ๊ฒฐ๊ตญ SQL๋กœ ๋ณ€ํ™˜๋œ๋‹ค. 

 

"select m From Member m where m.age > 18"

 

์—”ํ‹ฐํ‹ฐ์™€ ์†์„ฑ์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ( Member , age ) 

 

JPQL ํ‚ค์›Œ๋“œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค ( SELECT , FROM , where ) 

 

JPQL ์€ ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ( Member ) 

 

๋ณ„์นญ์€ ํ•„์ˆ˜์ด๋‹ค. ( Member as m ) as ๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค . 

 

 

 

TypeQuery, Query

 

TypedQuery<Member> query1 = em.createQuery("select m from Member m ", Member.class);

TypeQuey : ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋ช…ํ™•ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

Query query2 = em.createQuery("select m.username, m.age from Member m");

Query : ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

 

๊ฒฐ๊ณผ ์กฐํšŒ API

query.getResultList();

 

getResultList() : ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ , ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

( NPE ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค ) 

 

 

query.getSingleResult();

 

getSingleResult() : ๊ฒฐ๊ณผ๊ฐ€ ์ •ํ™•ํžˆ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค . ๋‹จ์ผ ๊ฐ์ฒด ๋ฐ˜ํ™˜

 

๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด javax.persistence.NoResultException

 

๋‘˜ ์ด์ƒ์ด๋ฉด javax.persistence.NonUniqueResultException

 

 

 

ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ

em.createQuery("select m from Member m where m.username = :username", Member.class)
        .setParameter("username","member1")
        .getSingleResult();

 

 ์ฟผ๋ฆฌ์— ์ž‘์„ฑ๋˜๋Š” ํŠน์ • ์†์„ฑ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

 ์ด๋ฆ„ ๊ธฐ์ค€ ๋ฐ”์ธ๋”ฉ์€ =: ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

ํ”„๋กœ์ ์…˜(SELECT)

 

SELECT ์ ˆ์— ์กฐํšŒํ•  ๋Œ€์ƒ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ”„๋กœ์ ์…˜์˜ ๋Œ€์ƒ 

 

์—”ํ‹ฐํ‹ฐ ํ”„๋กœ์ ์…˜

SLECET m FROM Member m

 

์—”ํ‹ฐํ‹ฐ ํ”„๋กœ์ ์…˜ 

SLECET m.team FROM Member m

 

 ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ํ”„๋กœ์ ์…˜ 

SLECET m.address FROM Member m

 

 ์Šค์นผ๋ผ ํƒ€์ž… ํ”„๋กœ์ ์…˜ ( ์ˆซ์ž, ๋ฌธ์ž๋“ฑ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… ) 

SLECET m.username, m.age FROM Member m

 

 

DISTINCT ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT DISTINCT m.username FROM Member m

 

 

 ์—ฌ๋Ÿฌ๊ฐ’ ์กฐํšŒ

Query query = em.createQuery("select m.username, m.age from Member m");

 

์—ฌ๋Ÿฌ๊ฐ’์œผ๋กœ ์กฐํšŒํ–ˆ์„ ๋•Œ๋Š” TypedQuery๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , Query๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

List<Object[]> resultList = query.getResultList();

for(Object[] row : resultList){
    String username = (String)row[0];
    Integer age = (Integer)row[1];
    Team team = (Team)row[2];
}

 

Object[] ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

 

TypedQuery<UserDTO> query =
        em.createQuery("SELECT NEW com.joont.dto.UserDTO(m.username, m.age, m.team) FROM Member m", UserDTO.class);

List<UserDTO> resultList = query.getResultList();

 

NEW ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Object[] ๋Œ€์‹  ๋ฐ”๋กœ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•ด์„œ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

  • ํŒจํ‚ค์ง€๋ช…์„ ํฌํ•จํ•œ ํด๋ž˜์Šค๋ช…์„ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
  • ์ˆœ์„œ์™€ ํƒ€์ž…์ด ์ผ์น˜ํ•˜๋Š” ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

 

 

 

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 ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 14. ํŽ˜์ด์ง• 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 ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 14. ํŽ˜์ด์ง• 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 ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 13. JPQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ• / ์ฟผ๋ฆฌ API
์ƒ๋‹จ์œผ๋กœ

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