[QueryDsl] 개발환경 설정

전설컵·2022년 5월 12일
1

QueryDSL

목록 보기
1/1

QueryDSL의 핵심인 Q엔티티 만드는 방법이 2가지 존재함.

  • gradle 설정만으로 설정하는 방식이 있음
    • 장점: 간단함.
    • 단점: gradle버전을 존나게탐.
  • plugin사용 방식
    • 장점: gradle버전 안타고 잘돌아감
    • 단점: 일단 플러그인 쓰는게 맘에 안듬
      근데 어쩔꺼여 Gradle 최신 버전 올라갈 때마다 build.gradle만들꺼여? 그래서 plugins방식으로 정리함.

build.gradle

plugins {
	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

dependencies {
	//querydsl_version=5.0.0 
	implementation "com.querydsl:querydsl-jpa:${querydsl_version}"
	implementation "com.querydsl:querydsl-apt:${querydsl_version}"
}

def querydslDir = "$buildDir/generated/querydsl"
sourceSets{
	main{
		java {
			srcDirs = ["$projectDir/src/main/java", "$querydslDir"]
		}
	}
}

//query dsl setting
querydsl {
	jpa = true
	querydslSourcesDir = querydslDir
}
compileQuerydsl{
	options.annotationProcessorPath = configurations.querydsl
}
configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
	querydsl.extendsFrom compileClasspath
}

QueryDslConfig

package io.labs.springreact.config;

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);
    }
}

Sample Entity

package io.labs.springreact.greet.model;

import lombok.*;

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

@Getter
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Greet {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String greeting;
}

RepositorySupport

package io.labs.springreact.greet.support;

import com.querydsl.jpa.impl.JPAQueryFactory;
import io.labs.springreact.greet.model.Greet;
import io.labs.springreact.greet.model.QGreet;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class GreetQuerySupport extends QuerydslRepositorySupport {

    private final JPAQueryFactory queryFactory;

    public GreetQuerySupport(JPAQueryFactory jpaQueryFactory) {
        super(Greet.class);
        this.queryFactory = jpaQueryFactory;
    }

    public Greet findById(Long id){
        QGreet greet = QGreet.greet;
        return (Greet) queryFactory
                .from(greet)
                .where(greet.id.eq(id))
                .fetchOne();
    }

    public List<Greet> findAll(){
        return (List<Greet>) queryFactory.from(QGreet.greet).fetch();
    }
}
profile
legend developer

0개의 댓글