λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

κ°œλ°œμ€‘/Java Persistence API (JPA)

객체 지ν–₯ 쿼리 μ†Œκ°œ

728x90
λ°˜μ‘ν˜•

🟒 κ°μ²΄ μ§€ν–₯ μΏΌλ¦¬ μ†Œκ°œ

EntityManager.find() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‹λ³„μžλ‘œ μ—”ν‹°ν‹° ν•˜λ‚˜λ₯Ό μ‘°νšŒν•  수 μžˆλ‹€.

μ΄λ ‡κ²Œ μ‘°νšŒν•œ 엔티티에 객체 κ·Έλž˜ν”„ 탐색을 μ‚¬μš©ν•˜λ©΄ μ—°κ΄€λœ μ—”ν‹°ν‹°λ₯Ό 찾을 수 μžˆλ‹€.

 

  • μ‹λ³„μžλ‘œ 쑰회
    • EntityManager
  • 객체 κ·Έλž˜ν”„ 탐색
    • a.getA()

이 κΈ°λŠ₯만으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κΈ° μ–΄λ ΅λ‹€.

 

예λ₯Όλ“€μ–΄ λ‚˜μ΄κ°€ 30μ‚΄ 이상인 νšŒμ›μ„ λͺ¨λ‘ κ²€μƒ‰ν•˜κ³  μ‹Άλ‹€λ©΄ μ’€ 더 ν˜„μ‹€μ μ΄κ³  λ³΅μž‘ν•œ 검색 방법이 ν•„μš”ν•˜λ‹€, 

κ·Έλ ‡λ‹€κ³  λͺ¨λ“  νšŒμ› μ—”ν‹°ν‹°λ₯Ό λ©”λͺ¨λ¦¬μ— μ˜¬λ €λ‘κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 30μ‚΄ 이상인 νšŒμ›μ„ κ²€μƒ‰ν•˜λŠ” 것은 ν˜„μ‹€μ„±μ΄ μ—†λ‹€.

 

κ²°κ΅­ DB 에 μžˆμœΌλ―€λ‘œ SQL 둜 ν•„μš”ν•œ λ‚΄μš©μ„ μ΅œλŒ€ν•œ κ±ΈλŸ¬μ„œ μ‘°νšŒν•΄μ•Ό ν•œλ‹€. 

ν•˜μ§€λ§Œ ORM 을 μ‚¬μš©ν•˜λ©΄ DB ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ μ—”ν‹°ν‹° 객체λ₯Ό λŒ€μƒμœΌλ‘œ κ°œλ°œν•˜λ―€λ‘œ

검색도 ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ μ—”ν‹°ν‹° 객체λ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” 방법이 ν•„μš”ν•˜λ‹€.

 

  • ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ 객체λ₯Ό λŒ€μƒμœΌλ‘œκ²€μƒ‰ν•˜λŠ” 객체지ν–₯ 쿼리닀.
  • SQL 을 μΆ”μƒν™”ν•΄μ„œ νŠΉμ • DB SQL 에 μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.

SQL 이 DB ν…Œμ΄λΈ”μ„ λŒ€μƒμœΌλ‘œ ν•˜λŠ” 데이터 μ€‘μ‹¬μ˜ 쿼리라면 JPQL 은 μ—”ν‹°ν‹° 객체λ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” 객체지ν–₯ 쿼리이닀.

 

JPQL 을 μ‚¬μš©ν•˜λ©΄ JPA λŠ” 이 JPQL을 λΆ„μ„ν•œ λ‹€μŒ μ μ ˆν•œ SQL을 λ§Œλ“€μ–΄μ„œ DB λ₯Ό μ‘°νšŒν•œλ‹€.

그리고 μ‘°νšŒν•œ 결과둜 μ—”ν‹°ν‹° 객체λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•œλ‹€.

 

JPQL 을 ν•œλ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ 객체지ν–₯ SQL 이닀.

처음 보면 SQL 둜 μ˜€ν•΄ν•  μ •λ„λ‘œ 문법이 λΉ„μŠ·ν•˜λ‹€.

λ”°λΌμ„œ SQL 에 μ΅μˆ™ν•œ κ°œλ°œμžλŠ” λͺ‡ 가지 차이점만 μ΄ν•΄ν•˜λ©΄ μ‰½κ²Œ 적응 κ°€λŠ₯ν•˜λ‹€.

 

JPA λŠ” JPQL 뿐만 μ•„λ‹ˆλΌ λ‹€μ–‘ν•œ 검색 방법을 μ œκ³΅ν•œλ‹€.


🟒 JPA κ°€ 곡식 μ§€μ›ν•˜λŠ” κΈ°λŠ₯

 

  • JPQL
    • Java Persistence Query Languge
  • Crieria 쿼리
    • JPQL 을 νŽΈν•˜κ²Œ μž‘μ„±ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” API
    • JPQL 을 νŽΈν•˜κ²Œ μž‘μ„±ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” λΉŒλ” 클래슀 λͺ¨μŒ.
  • λ„€μ΄ν‹°λΈŒ SQL
    • JPA μ—μ„œ JPQL λŒ€μ‹  직접 SQL 을 μ‚¬μš©ν•  수 μžˆλ‹€.

 

🟒 JPA κ°€ 곡식 μ§€μ›ν•˜μ§€ μ•Šμ§€λ§Œ μ°Έκ³ ν•  κΈ°λŠ₯

 

  • QueryDSL
    • Criteria 쿼리처럼 JPQL 을 νŽΈν•˜κ²Œ μž‘μ„±ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” λΉŒλ” 클래슀 λͺ¨μŒ, λΉ„ν‘œμ€€ μ˜€ν”ˆ μ†ŒμŠ€ ν”„λ ˆμž„ μ›Œν¬μ΄λ‹€.
  • JDBC 직접 μ‚¬μš©, Mybatis 같은 SQL 맀퍼 ν”„λ ˆμž„ μ›Œν¬ μ‚¬μš©
    • ν•„μš”ν•˜λ©΄ JDBC λ₯Ό 직접 μ‚¬μš©ν•  수 μžˆλ‹€.

 

κ°€μž₯ μ€‘μš”ν•œ 건 JPQL 이닀.

Crieria μ΄λ‚˜ QueryDSL λŠ” JPQL 을 νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” λΉŒλ” 클래슀 일 뿐이닀.

λ”°λΌμ„œ JPQL 을 이해해야 λ‚˜λ¨Έμ§€λ„ 이해할 수 μžˆλ‹€.

 


728x90
λ°˜μ‘ν˜•