ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Database] QueryDSL 개념 및 사용 방법
    Database 2024. 3. 24. 14:41

     

     

    QeuryDSL

     

     

     

    Querydsl - Unified Queries for Java

    Unified Queries for Java. Querydsl is compact, safe and easy to learn. <!-- Querydsl Unified Queries for Java Querydsl provides a unified querying layer for multiple backends in Java. Compared to the alternatives Querydsl is more compact, safer and easier

    querydsl.com

     

     

    📌 목차 

    - QueryDSL 이란?

    - QueryDSL 사용 방법

     

     

    📌 QueryDSL 이란 ? 

    DSL ( Domain Specific Language ) 란, 특정 영역에 특화된 언어를 의미하며,

    QueryDSL 은 쿼리 생성에 특화된 프레임워크를 지칭하는 말이다. 

     

    정리하면 QueryDSL 는 Hibernate 쿼리 언어의 쿼리를 생성 및 관리해주는 오픈소스 프레임워크이며

    공식 문서에서 확인할 수 있듯이 JPA, SQL, Mongodb 등의 여러가지 모듈을 지원하고 있다.

     

    QueryDSL 공식 홈페이지
    QueryDSL 공식 홈페이지

     

    ⚡ QueryDSL JPA 

    나는 SpringBoot 로 토이프로젝트를 하고 있어서 QueryDSL JPA 에 대해 좀더 자세히 알아보려고 한다.

      - QueryDSL JPA는 SQL, JPQL을 코드로 작성할 수 있도록 해주는 빌더 역할의 API 이다.  - Entity 클래스와 매핑되는 QClass 라는 객체를 사용하여 쿼리를 실행한다.    ( JPA Annotation Processeor 가 컴파일 시점에 작동하여 @Entity 등등의 어노테이션을 찾아 해당 파일들을 분석하고 QClass 를 만들어 준다. )  - QueryDSL 은 동적 쿼리를 아주 편리하게 작성할 수 있어 복잡한 동적 쿼리에서 사용하고,    단순한 경우에는 Spring Data JPA 를 사용한다.

     

     

    ⚡ ORM ( Object Relational Mapping )

      - 객체와 관계형 데이터베이스 매핑을 뜻하는 말이다.

        OOP ( Object Oriented Programming ) 에서 쓰는 객체라는 개념을 구현한 클래스와

        RDB ( Relational Database ) 에서 쓰이는 데이터인 테이블을 매핑(연결)하는 것을 의미한다.

      - 객체 ORM 을 이용하면 SQL Query 가 아닌 메소드를 통해 데이터를 조작할 수 있다.

        예를 들어

        SELECT * FROM WORK;

        이라는 쿼리 대신 WORK 테이블과 매핑된 객체를 통해

        work.findAll(); 

        메소드 호출로 데이터를 조작할 수 있다.

     

    ⚡ HIBERNATE

    JPA HIBERNATE
    JPA HIBERNATE

     

      - 하이버네이트는 자바 언어를 위한 ORM 프레임워크이다. 

        JPA 의 구현체로 JPA 인터페이스를 구현하며 내부적으로는 JDBC API 를 사용한다.

     

    ⚡ JPA ( Java Persistence API )

    Spring Data JPA
    Spring Data JPA

     

    - 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 모음이다.

     

    ⚡ JDBC ( Java Database Connectivity )

      - 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 이다.

        즉 자바에서 DB 작업을 위한 표준이라고 설명 할 수 있다.

     

     

    📌 QueryDSL 사용 방법 

    IntelliJ IDEA 에서 프로젝트를 진행하고 있어 해당 빌드 옵션으로의 설정 방법이다.

     

    1. build.gradle ( .kts )

    dependencies {
    	/* Querydsl build.gradle 사용 시 */
    	implementation 'com.querydsl:querydsl-jpa'
    	annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
    	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    	annotationProcessor "jakarta.persistence:jakarta.persistence-api
    }

     

    dependencies {
        /* QueryDSL build.gradle.kts 사용 시 */
        // QueryDSL Version Setting
        val queryDslVersion = "5.0.0"
    
        implementation ("com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta")
        annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:jakarta")
        annotationProcessor("jakarta.persistence:jakarta.persistence-api")
        annotationProcessor("jakarta.annotation:jakarta.annotation-api")
    }

     

    2. gradle 작업 옵션에서 clean → classes 또는 compile.java 클릭

    gradle 작업 실행
    gradle 작업 실행

     

    3. QClass 생성 확인

    QClass 생성 확인
    QClass 생성 확인

     

    4. Repository 에서 사용

     

    +. QClass 삭제 시

    IntelliJ IDEA 에서는 src/main/generated 에 파일이 생성되고, 상황에 따라 QClass 파일을 직접 삭제해야하는 경우도 있다.

    build.gradle(.kts) 에 아래 스크립트를 추가하면 gradle clean 명령어를 실행할 때, src/main/generated 의 파일도 같이 삭제된다.

     

    //Querydsl 추가, 자동 생성된 Q클래스 gradle clean으로 제거
    clean {
    	delete file('src/main/generated')
    }

     

     

     

     

    📌 Reference

    @L.O.K - [QueryDSL] QueryDSL이란?

    https://lordofkangs.tistory.com/

    @<Hyun/Log> - [JPA] QueryDSL이란? 그리고 설정 방법

    https://hstory0208.tistory.com/

    @coco3o - [DataBase] ORM(Object Relational Mapping)의 개념

    https://dev-coco.tistory.com/

    @suhwan.dev - JPA, Hibernate, 그리고 Spring Data JPA의 차이점

    https://suhwan.dev/

    @경험의 연장선 - [DB] 하이버네이트(Hibernate)란?

    https://livenow14.tistory.com/7

    'Database' 카테고리의 다른 글

    [Database] H2 DB 개념 및 3가지 모드와 사용법  (0) 2024.03.19

    댓글

Designed by IT's H.H.