반응형
    
    
    
  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 |