y-seo
y-seo의 딩코 기록들
y-seo
  • 분류 전체보기 (174)
    • Computer Science (49)
      • Database Design & Query Lan.. (10)
      • Network Security (16)
      • Software Engineering (6)
      • Computer Network (17)
    • Spring (50)
      • Spring-Basic (11)
      • SpringBoot-AWS (7)
      • SpringBoot&JPA (22)
      • 토비의 스프링 (3)
      • + α (7)
    • Cloud (22)
      • AWS (4)
      • GCP (1)
      • ElasticSearch (17)
    • Test (3)
    • Project (4)
    • Algorithm (24)
      • 개념 (9)
      • 문제풀이 (15)
    • AI (3)
      • About (2)
      • AIDU ez (1)
    • IT (5)
      • SQLD (4)
      • ADsP (1)
    • Error (4)
    • ETC (1)
    • Review (8)
    • Free mover (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

태그

  • 알고리즘
  • JPA
  • 네트워크보안
  • 알기 쉬운 정보보호개론 3판
  • 인프런
  • baekjoon
  • 백준
  • springboot
  • 자바
  • 파이썬
  • java
  • 컴퓨터 네트워킹 하향식 접근
  • algorithm
  • 김영한
  • Spring
  • 스프링
  • Python
  • 보안
  • 스프링부트
  • 네트워크

티스토리

hELLO · Designed By 정상우.
y-seo

y-seo의 딩코 기록들

Spring/+ α

JPQL과 QueryDSL에 대해 끄적

2023. 11. 7. 19:56

Intro

  • JPA는 객체 중심적으로 코드를 작성할 수 있게 해주는데 그렇게 되면 JPA만으로는 모든 쿼리를 커버할 수 없다.
  • 따라서 JPA는 객체를 검색(조회,select)할 수 있는 다양한 query 방법을 지원한다.
    • JPQL
    • JPA Criteria
    • QueryDSL
    • Native SQL
    • 등등..
  • 이 포스팅에서는 주로 사용되는 JPQL과 QueryDSL에 대해 다루고자 한다.

 

JPQL의 개념

  • Java Persistence Query Language
  • JPQL은 엔티티 객체를 조회하는 객체지향 쿼리이다.
  • JPQL은 가장 중요한 객체지향 쿼리 언어이다.
  • JPA는 JPQL을 기반으로 하는 다양한 쿼리 서비스를 지원한다.
    • JPA Criteria, QueryDSL, Natice SQL 등..

 

JPQL의 특징

  • SQL과 문법이 비슷하다.
    • 오히려 SQL보다 더 간결하다.
  • ANSI 표준에서 지원하는 쿼리 명령문을 모두 제공한다.
    • SELECT, FROM, WHERE 등
  • 특정 DB의 SQL에 의존하지 않도록 SQL을 추상화 하여 제공한다.
    • DB를 변경하고 싶으면 DB Dialect만 변경하면 된다.
  • 테이블이 아닌 객체를 대상으로 검색하는 쿼리이다.
  • 결국에는 SQL로 변환된다.

 

JPQL의 단점

  • 문자열로 작성되기 때문에 컴파일 시 에러를 잡기 어렵다.
    • 추후 배포 시에 문제가 생길 수 있다.
  • 동적으로 쿼리 언어를 작성하는 데에 효율적이지 못하다.
    • 특정 조건에 따라 참일 때 A 쿼리를 실행하고, 거짓일 때는 B 쿼리를 실행하는 행위

 

JPQL 문법

  • 기본 규칙
    • 대소문자 구분을 한다.
      • SELECT, AS와 같은 키워드는 구분하지 않아도 된다.
    • 엔티티 이름 사용한다.
      • @Entity(name="~~") 로 설정할 수 있다.
      • 테이블 이름을 사용하지 않는다.
    • 별칭을 필수적으로 명시/사용한다.
      • AS 키워드를 생략할 수 있다.
  • 기본 문법
SELECT m FROM Member AS m WHERE m.username = 'xxx'

 

QueryDSL의 개념

  • JPQL의 단점을 보완하기 위해 사용하는 프레임워크다.
  • 정적 타입을 이용해 쿼리를 생성해준다.

 

QueryDSL의 장점

  • 코드로 쿼리를 작성하므로 컴파일 시점에서 오타를 찾아낼 수 있다.
  • 자동 완성으로 코드 작성이 간편하다.
  • 동적 쿼리 작성이 편리하다.
  • 코드를 재사용할 수 있다.
  • JPQL과 유사한 문법이라 쉽게 적응할 수 있다.
저작자표시 (새창열림)

'Spring > + α' 카테고리의 다른 글

API 기초 - API 의미, API 종류(WebSokcet, REST, Web), API 유형  (0) 2023.11.22
DTO, DAO에 대해서  (0) 2023.11.15
SpringBoot에 대해 끄적  (0) 2023.09.27
JPA에 대해 끄적  (0) 2023.09.27
[스프링 이것저것] 의존성 주입 (DI) 개념 & 방법  (0) 2023.05.07
    'Spring/+ α' 카테고리의 다른 글
    • API 기초 - API 의미, API 종류(WebSokcet, REST, Web), API 유형
    • DTO, DAO에 대해서
    • SpringBoot에 대해 끄적
    • JPA에 대해 끄적
    y-seo
    y-seo

    티스토리툴바