DevBoi

[QueryDSL] QueryDSL 세팅 본문

Develop/[JPA]

[QueryDSL] QueryDSL 세팅

HiSmith 2023. 5. 1. 15:36
반응형

1. Build.gradle에 추가

// QueryDSL로 주석 처리한 부분만 신경쓰면된다.

// QueryDSL
buildscript {
  ext {
    queryDslVersion = "5.0.0"
  }
}

plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.12-SNAPSHOT'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
  // QueryDSL
  id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
	maven { url 'https://repo.spring.io/milestone' }
	maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  implementation 'org.springframework.boot:spring-boot-starter-web'
  runtimeOnly 'com.h2database:h2'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'

  // QueryDSL
  implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
  implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
}
// QueryDSL
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
  jpa = true
  querydslSourcesDir = querydslDir
}
// QueryDSL
sourceSets {
  main.java.srcDir querydslDir
}
// QueryDSL
compileQuerydsl{
  options.annotationProcessorPath = configurations.querydsl
}
// QueryDSL
configurations {
  compileOnly {
    extendsFrom annotationProcessor
  }
  querydsl.extendsFrom compileClasspath
}

 

2. Book Entity 생성

package com.practice.demo.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Book {

  @Id @GeneratedValue(strategy = GenerationType.AUTO)
  private Long bookId;

}

 

3. Gradle Task compileQueryDSL 실행 및 , build 하위 QBook 엔티티 자동생성 확인

package com.practice.demo.domain;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;


/**
 * QBook is a Querydsl query type for Book
 */
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QBook extends EntityPathBase<Book> {

    private static final long serialVersionUID = 691710094L;

    public static final QBook book = new QBook("book");

    public final NumberPath<Long> bookId = createNumber("bookId", Long.class);

    public QBook(String variable) {
        super(Book.class, forVariable(variable));
    }

    public QBook(Path<? extends Book> path) {
        super(path.getType(), path.getMetadata());
    }

    public QBook(PathMetadata metadata) {
        super(Book.class, metadata);
    }

}

 

4. application.yml

spring:
  # DB 연결
  datasource:
    # 설치된 H2 DB와 연결 URL
    url: jdbc:h2:tcp://localhost/~/test
    # 접속을 위한 드라이버
    driver-class-name: org.h2.Driver
    # springboot 2.4 부터는 username이 꼭 있어야합니다. 없으면 에러가 발생합니다.
    username: sa
  jpa:
    # JPA가 수행하는 SQL을 볼 수 있다.
    show-sql: true
    # 객체를 보고 자동으로 테이블 생성 여부. 생성 - create, 비생성 - none
    # 테스트이기 때문에 create로 설정하며
    # 실제로는 none 으로 합니다. create이면 기존의 테이블을 전부 밀어버립니다.
    hibernate:
      ddl-auto: create
  # 콘솔 확인 을 위한 always
  output:
    ansi:
      enabled: always
# 파라미터 확인을 위한 trace
logging:
level:
org.hibernate.type: trace

 

5. QuerydslConfiguration 등록 

package com.practice.demo.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;

@Configuration
public class QuerydslConfiguration {

  @Autowired
  EntityManager em;
  
  @Bean
  public JPAQueryFactory jpaQueryFactory(){
    return new JPAQueryFactory(em);
  }
}

6. BookRepository

package com.practice.demo.repository;

import com.practice.demo.domain.Book;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@RequiredArgsConstructor
public class BookRepository {
  private final JPAQueryFactory queryFactory;

}

 

 

우선 QueryDsl에 대한 세팅은 끝났다

 

다음에 CRUD등 최적화에 대해서 진행을 하고 포스팅을 해보자

반응형

'Develop > [JPA]' 카테고리의 다른 글

[Spring] Mariadb - JPA 세팅  (0) 2023.07.21
[JPA] QueryDsl 사용하기  (0) 2023.05.02
JPA orphanRemoval 이란?  (0) 2023.01.09
[Jpa] delete 관련 잘 안됨  (0) 2023.01.09
[JPA] 생성시간, 수정시간 자동화 하기  (0) 2022.12.16