[QueryDSL] 프로젝트 환경 설정

kiteB·2021년 11월 28일
0

QueryDSL

목록 보기
1/9
post-thumbnail

[ 프로젝트 생성 ]

1. strat.spring.io에 접속하여 프로젝트 생성


2. 동작 확인

2-1. 테스트 코드 실행

2-2. localhost:8080 접속

2-3. HelloController 생성

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello!";
    }
}


[ Querydsl 설정과 검증 ]

1. build.gradle 설정

querydsl를 사용하기 위해서는 querydsl 설정을 추가해주어야 한다.

plugins {
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    //querydsl 추가
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
    id 'java'
}

group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.6.1'
    //querydsl 추가
    implementation 'com.querydsl:querydsl-jpa'

    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath }
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

ㅎㅎ 근데 이렇게 했는데 환경설정 검증에서 자꾸 에러가 난다,,☹

자꾸 에러가 난다,,

그래서 결국 강사님 build.gradle 그대로 복붙해왔다,,
내일 다시 최신 스프링 버전에 맞는 코드로 시도해볼거다😣

plugins {
	id 'org.springframework.boot' version '2.2.2.RELEASE'
	id 'io.spring.dependency-management' version '1.0.8.RELEASE'
	//querydsl 추가
	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
	id 'java'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}
repositories {
	mavenCentral()
}
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	//querydsl 추가
	implementation 'com.querydsl:querydsl-jpa'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}
test {
	useJUnitPlatform()
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
	jpa = true
	querydslSourcesDir = querydslDir
}
sourceSets {
	main.java.srcDir querydslDir
}
configurations {
	querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
	options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

어쨌든 됐다고 치고~


2. Querydsl 환경설정 검증

2-1. 검증용 엔티티 생성

@Entity
@Getter @Setter
public class Hello {

    @Id @GeneratedValue
    private Long id;
}

2-2. 검증용 Q 타입 생성

  • Gradle → Tasks → build → clean

  • Grade → Tasks → other → compileQuerydsl

이걸 최신 스프링 버전으로 하면 에러가 났었다 ㅠㅠ

2-3. Q 타입 생성 확인

성공적으로 compile을 마치면 이렇게 QHello가 생성된 것을 확인할 수 있다!

2-4. 테스트 케이스로 실행 검증

@SpringBootTest
@Transactional
class QuerydslApplicationTests {

    @Autowired
    EntityManager em;

    @Test
    void contextLoads() {
        Hello hello = new Hello();
        em.persist(hello);
        
        JPAQueryFactory query = new JPAQueryFactory(em);
        QHello qHello = new QHello("h");
        
        Hello result = query
                .selectFrom(qHello)
                .fetchOne();

        assertThat(result).isEqualTo(hello);
        assertThat(result.getId()).isEqualTo(hello.getId());
    }
}

테스트 성공!

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글