https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/
강의를 들으며 생각 정리
프로젝트 생성
스프링 부트 스타터(https://start.spring.io/) 에서 프로젝트를 생성한다.
dependencies : web, jpa, h2, lombok
간단하게 테스트(애플리케이션 실행, 컨트롤러 테스트 등) 해서 정상 작동하는지 확인한다.
+) 롬복의 경우 다음 링크를 참고해서 설치한다.
+) IntelliJ에서 Gradle 사용 시 주의점
Querydsl 설정과 검증
build.gradle에 주석을 참고해서 querydsl 설정 추가
<build.gradle>
plugins {
id 'org.springframework.boot' version '2.5.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
id 'java'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
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'
}
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 추가 끝
<Querydsl 환경설정 검증>
검증용 엔티티 생성
</entity/Hello>
@Entity
@Getter
@Setter
public class Hello {
@Id @GeneratedValue
private Long id;
}
검증용 Q 타입 생성
Gradle IntelliJ 사용법
Gradle -> Tasks -> other -> compileQuerydsl (더블 클릭)
Gradle 콘솔 사용법
프로젝트 디렉토리 이동 -> ./gradlew compileQuerydsl
Q 타입 생성 확인
build -> generated -> querydsl -> study -> entity -> QHello.java 파일이 생성되어 있어야 함
+) 참고
Q타입은 컴파일 시점에 자동 생성되므로 버전관리(Git)에 포함하지 않는 것이 좋다.
앞서 설정에서 생성 위치를 gradle build 폴더 아래 생성되도록 했기 때문에 git에 포함하지 않도록 했다.
테스트
@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory query = new JPAQueryFactory(em);
QHello qHello = QHello.hello;
Hello result = query
.selectFrom(qHello)
.fetchOne();
assertThat(result).isEqualTo(hello);
assertThat(result.getId()).isEqualTo(hello.getId());
}
Querydsl Q타입이 정상 동작하는가?
lombok이 정상 동작 하는가?
라이브러리 살펴보기
스프링부트는 기본적으로 라이브러리를 등록하면 의존관계가 필요한 다른 라이브러리들을 모두 가져온다.
프로젝트 생성시 등록한 라이브러리들에 대한 주요 의존 라이브러리들을 살펴보면 다음과 같다.
Querydsl 라이브러리
querydsl-jpa: Querydsl 라이브러리
스프링부트 라이브러리
spring-boot-starter-web
- spring-boot-starter-tomcat: 톰캣 (웹서버)
- spring-webmvc: 스프링 웹 MVC
spring-boot-starter-data-jpa
- spring-boot-starter-aop
- spring-boot-starter-jdbc
- HikariCP 커넥션 풀 (부트 기본)
- hibernate + JPA: 하이버네이트 + JPA
- spring-data-jpa: 스프링 데이터 JPA
spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback, slf4j
테스트 라이브러리
spring-boot-starter-test
- junit: 테스트 프레임워크(junit5)
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
H2 데이터베이스 설치
h2 데이터베이스는 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면을 제공한다.
version : 1.4.200
+) 현재 사용하는 스프링부트 버전과 맞는 h2 버전은 스프링 매뉴얼을 참고하면 된다.
https://gksdudrb922.tistory.com/110
다운로드 및 설치 방법
스프링 부트 설정 - JPA, 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:
format_sql: true
logging.level:
org.hibernate.SQL: debug
spring.datasource -> H2 데이터베이스 연결
spring.jpa.hibernate.ddl-auto: create -> 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성한다.
spring.jpa.properties.hibernate: format_sql -> SQL 출력시 보기 좋게 포맷 후 출력해준다.
logging.level.org.hibernate.SQL : debug -> logger를 통해 하이버네이트 실행 SQL을 남긴다
+) 참고: 모든 로그 출력은 가급적 로거를 통해 남겨야 한다.
+) 쿼리 파라미터 로그 남기기
'java > querydsl' 카테고리의 다른 글
[Querydsl] 실무 활용 - 스프링 데이터 JPA와 Querydsl (0) | 2021.06.06 |
---|---|
[Querydsl] 실무 활용 - 순수 JPA와 Querydsl (0) | 2021.06.04 |
[Querydsl] 중급 문법 (1) | 2021.06.03 |
[Querydsl] 기본 문법 (0) | 2021.06.02 |
[Querydsl] 예제 도메인 모델 (1) | 2021.06.01 |