Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링
- 값 타입 컬렉션
- QueryDSL
- 일론머스크
- 스프링MVC
- 임베디드 타입
- JPQL
- 프로젝트 환경설정
- 컬렉션 조회 최적화
- 트위터
- JPA
- 타임리프 문법
- 불변 객체
- Bean Validation
- 검증 애노테이션
- JPA 활용2
- 실무활용
- 스프링 데이터 JPA
- 로그인
- jpa 활용
- 김영한
- 페이징
- API 개발 고급
- JPA 활용 2
- 기본문법
- 예제 도메인 모델
- 벌크 연산
- 스프링 mvc
- Spring Data JPA
- 타임리프
Archives
- Today
- Total
RE-Heat 개발자 일지
[Querydsl] [1] 프로젝트 환경 설정 본문
https://www.inflearn.com/course/querydsl-%EC%8B%A4%EC%A0%84/dashboard
인프런 김영한 님의 강의를 듣고 작성한 글입니다.
[1] 프로젝트 생성
■ 스프링 부트 스타터
■ IntelliJ Gradle 대신 자바로 바로 실행하기
■ 롬복 적용
[2] Querydsl 설정과 검증
스프링 부트 2.6 이상이면 Querydsl 5.0으로 설정해야 한다.
build.gradle
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'org.springframework.boot' version '2.7.15'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
id 'java'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
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:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('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 추가 끝
- def querydslDir = "$buildDir/generated/querydsl"은 build 할 때 생성될 q파일의 경로를 명시해 준 것이다.
※ 주의사항
Q타입은 컴파일 시점에 자동 생성되므로 git으로 관리하면 안 된다. 단, 기본적으로 그래들에서 build 파일은 git.ignore에 등록돼 있으므로 신경 쓰진 않아도 된다.
■ 테스트
@SpringBootTest
@Transactional
@Rollback(false)
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");
QHello qHello = QHello.hello;
Hello result = query.selectFrom(qHello)
.fetchOne();
assertThat(result).isEqualTo(hello);
assertThat(result.getId()).isEqualTo(hello.getId());
}
}
- QHello에 static으로 선언해 놓은 것이 있어 굳이 QHello qhello = new QHello("h");로 할 필요가 없다.
- 테스트에선 DB가 자동으로 롤백되므로 확인하려면 @Rollback(false)를 지정해줘야 한다.
[3] 라이브러리 살펴보기
■ Querydsl 라이브러리
- querydsl-apt: Querydsl 관련 코드 생성 기능을 제공
- querydsl-jpa: querydsl 라이브러리
■ 핵심 라이브러리
- 스프링 MVC
- JPA, 하이버네이트
- 스프링데이터 JPA
- Querydsl
■ 기타 라이브러리
- H2 데이터베이스 클라이언트
- 커넥션풀: 부트 기본은 HikariCP
- 로깅 SLF4J & LogBack
- 테스트
[4] H2 데이터베이스 설치
[JPA 활용1] [1] 프로젝트 환경설정 [4] H2 데이터베이스 설치 확인
[5] 스프링 부트 설정 - 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:
# show_sql: true
format_sql: true
use_sql_comments : true
logging.level:
org.hibernate.SQL: debug
#org.hibernate.type: trace
- ddl-auto: create는 애플리케이션 실행 시점에 테이블을 drop 후 생성한다.
- 자세한 내역은 [JPA 활용1] [1] 프로젝트 환경설정의 [5] JPA와 DB 설정, 동작 확인 체크
- org.hibernate.SQL : logger를 통해 실행된 SQL을 남긴다.
■ 동작확인
QuerydslApplicationTests를 돌리면 데이터가 잘 들어가는 것을 확인할 수 있다.
→ Rollback(false) 까먹지 말자
■ 쿼리 파라미터 로그 남기기
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8
스프링부트 사용 시 build.gradle에 이 라이브러리만 추가하면 된다.
실행화면
'백엔드 > Querydsl' 카테고리의 다른 글
[Querydsl] [4] 중급 문법 (하편) - 동적 쿼리·벌크 연산·SQL function (0) | 2023.09.30 |
---|---|
[Querydsl] [4] 중급 문법 (상편) - 프로젝션 반환·@QueryProjection (0) | 2023.09.29 |
[Querydsl] [3] 기본 문법 (하편) (0) | 2023.09.17 |
[Querydsl] [3] 기본 문법 (상편) (0) | 2023.09.17 |
[Querydsl] [2] 예제 도메인 모델 (0) | 2023.09.15 |