QueryDSL의 핵심인 Q엔티티 만드는 방법이 2가지 존재함.
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
}
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);
}
}
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;
}
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();
}
}