JAVA

springboot / querydsl ์„ค์ •

girin_dev 2022. 5. 31. 00:14
728x90
๋ฐ˜์‘ํ˜•

 

 

๐Ÿฅ• querydsl ์„ค์ •์„ ํ†ตํ•œ Qํด๋ž˜์Šค ์ž‘๋™ ๋ฐ ์‹คํ–‰ ํ™•์ธ๊นŒ์ง€. 

 

 

 

# springboot 2.7.0 

 

build.gradle 

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'org.springframework.boot' version '2.7.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'war'
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

dependencies {

    // querydsl
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

    annotationProcessor(
            "jakarta.persistence:jakarta.persistence-api",
            "jakarta.annotation:jakarta.annotation-api",
            )

}

// query dsl
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl{
    options.annotationProcessorPath = configurations.querydsl

 

 

 

 

# QuerydslConfig.java

 

 

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

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Configuration
public class QuerydslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }

}

 

Entity to Qclass

import lombok.*;

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

@Entity
@Builder
@Getter
@ToString(exclude = "password")
@AllArgsConstructor
@NoArgsConstructor
public class Chief {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String email;

    private String password;

    private String address;

    private String phone;

    @Builder
    public static Chief createChief(long id, String email, String password, String address, String phone){
        return new Chief(id,email,password,address,phone);
    }

}

 

Dto to Qclass

import com.querydsl.core.annotations.QueryProjection;
import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@ToString
public class ChiefDto {

    private long id;

    private String email;

    private String password;

    private String address;

    private String phone;

    @QueryProjection  // querydsl 
    public ChiefDto(long id, String email, String password, String address, String phone) {
        this.id = id;
        this.email = email;
        this.password = password;
        this.address = address;
        this.phone = phone;
    }
}

 

 

Repository ๋˜๋Š” RepositoryCustome ์„ธํŒ…. 

 

์ƒ์†์„ ํšŒํ”ผํ•˜๊ธฐ์œ„ํ•ด bean์œผ๋กœ ๋“ฑ๋กํ•œ JPAQueryFactory๋ฅผ ์‚ฌ์šฉํ•จ. 

 

import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

/*
    // ๊ธฐ์กด ๋ฐฉ๋ฒ• 1.
    public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {}
    // ๊ธฐ์กด ๋ฐฉ๋ฒ•2
    public class MemberRepositoryCustom extends QuerydslRepositorySupport {}
*/
@Repository
@RequiredArgsConstructor
public class ChiefRepositoryCustom {
    private final JPAQueryFactory queryFactory;

    public ChiefDto searchByKeyword(String keyword) {

        return null;
//        return queryFactory
//                .select(new ChiefDto(~~~))
//                .from()
//                .fetch();  ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ.
    }
}

 

 

 

settings ์ฒดํฌ

 

 

 

gradle - orther - compileQuerydsl ์‹คํ–‰ : 

 

Qํด๋ž˜์Šค ์ƒ์„ฑ๋œ๊ฒƒ๊นŒ์ง€ ํ™•์ธ.

 

 

 

์‹คํ–‰๊นŒ์ง€.

 

 

 

์„ค์ •์— ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด, 

 

https://devfoxstar.github.io/java/intellij-querydsl-error/

 

Intellij์—์„œ QueryDSL ์˜ค๋ฅ˜ (cannot find symbol Q class)

Spring Boot ํ”„๋กœ์ ํŠธ์—์„œ Spring Data JPA๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ํ•œ ๋ฒˆ์ฏค ๋ณผ์ˆ˜์žˆ๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ JPA์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฟผ๋ฆฌ๋ฉ”์†Œ๋“œ, @Query…

devfoxstar.github.io

 

์ฐธ์กฐํ•ฉ์‹œ๋‹ค.

 

# ๋ ˆํผ๋Ÿฐ์Šค ๋ฌธ์„œ

 

http://querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/#intro

 

Querydsl - ๋ ˆํผ๋Ÿฐ์Šค ๋ฌธ์„œ

Querydsl์€ JPA, JDO, Mongodb ๋ชจ๋“ˆ์—์„œ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•ด ์ž๋ฐ”6์˜ APT ์–ด๋…ธํ…Œ์ด์…˜ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์ ˆ์—์„œ๋Š” ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์„ค์ • ์˜ต์…˜๊ณผ APT์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ์„ค๋ช…ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Query

querydsl.com

 

320x100
๋ฐ˜์‘ํ˜•