개발자의 오르막

[QueryDsl #1] 프로젝트 환경설정 본문

ORM/JPA

[QueryDsl #1] 프로젝트 환경설정

계단 2020. 10. 25. 14:25

# 프로젝트 환경설정

- 먼저 Gradle, Java11 의 프로젝트를 생성해준다.

- 다음 프로젝트에 사용될 기본적인 Dependency 를 설정해준다.

- build.gradle

plugins {
    id 'org.springframework.boot' version '2.2.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
}

group = 'com.gig'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/milestone' }
    maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.modelmapper:modelmapper:2.3.6'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    runtimeOnly 'mysql:mysql-connector-java'
    runtimeOnly 'com.h2database:h2'
    // compile group: 'org.postgresql', name: 'postgresql', version: '42.2.2'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

- 다음 lombok 플러그인 설치와 annotation processors 를 설정해준다.

  (Files -> Settings 에 plugins 와 annotation processor 를 검색하면 설정 화면이 나온다.)

- 다음 querydsl 설정을 추가해준다.

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 = 'com.gig'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/milestone' }
    maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // querydsl
    implementation 'com.querydsl:querydsl-jpa'
    compile 'org.modelmapper:modelmapper:2.3.6'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    runtimeOnly 'mysql:mysql-connector-java'
    runtimeOnly 'com.h2database:h2'
    // compile group: 'org.postgresql', name: 'postgresql', version: '42.2.2'
    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
}

* 이때 주의할 점은 def querydslDir = "$buildDir/generated/querydsl"

  에서 " 를 써줘야 한다. '를 쓰면 $buildDir 이 먹지 않고 문자로 들어간다.

 

- 임의의 도메인을 생성해준다.

@Entity
@Getter
@Setter
public class PocketMon {

    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

}

- querydsl compile 을 해준다.

- 그러면 아래와 같이 폴더가 구성된다.

 

- bulid 터미널 명령어

./gradlew clean
./gradlew compileQuerydsl
./gradlew compileJava

  java 11 에서는 clean 만 작동하고, compile은 작동되지 않는다..

 

- QueryDsl 테스트 쿼리를 짠 후 실행해본다.

@Transactional
@SpringBootTest
@AutoConfigureMockMvc
public class QuerydslApplicationTests {

    @PersistenceContext
    EntityManager em;

    @Test
    void contextLoads() {
        PocketMon pocketMon = new PocketMon();
        em.persist(pocketMon);

        JPAQueryFactory query = new JPAQueryFactory(em);
        QPocketMon qPocketMon = new QPocketMon("p");

        PocketMon result = query.selectFrom(qPocketMon).fetchOne();
        Assertions.assertThat(result).isEqualTo(pocketMon);
        Assertions.assertThat(result.getId()).isEqualTo(pocketMon.getId());
    }
}

 

# H2 데이터베이스 환경 구성하기

- www.h2database.com/html/main.htmlwww.h2database.com/html/download.html

 

Downloads

Downloads Version 1.4.200 (2019-10-14) Windows Installer (SHA1 checksum: 12710a463318cf23c0e0e3f7d58a0f232bd39cfe) Platform-Independent Zip (SHA1 checksum: 5898966bbca0b29ee02602fb84e0eb90ec92eec2) Version 1.4.199 (2019-03-13), Last Stable Windows Installe

www.h2database.com

 위의 버전을 설치한다.

 

- 설치 후 H2 console 을 실행하면 웹으로 동작하는데, 이때 IP 주소를 localhost 로 대체해준다.

- H2 console 을 사용하기 위해서는 최초 1번은 파일 타입으로 실행해야한다. ( 그래야 데이터베이스가 실행된다. )

  jdbc url 을 아래와 같이 설정해준다.

jdbc:h2:~/querydsl

- 다음 연결을 끊고 local 에 있는 DB 와 웹 어플리캐이션이 통신해서 접근할 수 있도록 TCP 주소로 바꿔준다.

jdbc:h2:tcp://localhost/~/querydsl

 

- 이후 프로젝트에 application.yml 파일을 생성 후 DB와 연동해준다.

- application.yml

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/querydsl
    username: sa
    password:
    driver-class-name: org.h2.Driver


  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
    #    show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
  # org.hibernate.type: trace

- 데이터베이스 탭에도 위의 DB를 연동해준다.

 

- 아래의 라이브러리를 추가하면 sql 을 볼 때 ? 로 뜨는 value 값도 볼 수 있다.

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

 

 

 

Comments