반응형
이클립스, 스프링부트 2.7, 그래들
project 우클릭 > properties > Java Compiler > Annotation Processing
체크 Enable project specific settings
체크 Enable annotation processing
Generated source directory : build/generated 혹은 target/generated
//build.gradle
plugins {
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
dependencies {
// queryDsl
implementation "com.querydsl:querydsl-jpa:5.0.0" // QueryDSL JPA 의존성
implementation "com.querydsl:querydsl-apt:5.0.0" // QueryDSL APT 의존성 (Annotation Processor)
}
// querydsl 설정---------
def querydslDir = "build/generated/sources/annotationProcessor/main"
querydsl {
jpa = true
querydslDefault = true
querydslSourcesDir = querydslDir
}
sourceSets {
main {
java {
srcDirs = ['src/main/java', querydslDir]
}
}
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
// querydsl 설정 끝---------
인텔리제이 쓸 경우 설정이 다름. 이것은 이클립스 버전...
Q클래스가 생성되면 쿼리를 작성할 수 있다.
1. 쿼리를 작성할 때 selectfrom을 사용하면 기본 dto에 담을 수 있음
2. select.from....으로 작성하면 dto에 담기위한 추가 작업이 필요함(서브쿼리를 써야해서 따로 사용하는 경우였음)
1) stream().map().collect() 사용법
List<Member> members = queryFactory
.select(qMember)
.from(qMember)
.fetch()
.stream()
.map(tuple -> tuple.get(qMember)) // Tuple에서 Member 엔티티 추출
.collect(Collectors.toList());
2) QueryDsl이 제공하는 projection.field 사용법
//Proejctions.fields로 select절을 감싼다.
List<MemberDTO> members = queryFactory
.select(Projections.fields(MemberDTO.class,
qMember.id,
qMember.name,
qMember.email
))
.from(qMember)
.fetch();
3. 장단점 비교
반응형