본문 바로가기
Back-End/Spring

Querydsl 설정

by 어렵다어려웡 2021. 3. 1.

 1. build.gradle 설정 추가

 

plugins { 
	
    // ---- 생략 -----
    //   동적쿼리 querydsl 관련 설정 추가
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
dependencies {

		// -----생략 ------
        //    querydsl 관련 설정 추가
    implementation 'com.querydsl:querydsl-jpa'
}
// 가장 하단
// 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
}

2. 우측 Gradle  -> Tasks  -> others  ->  compileQuerydsl 실행

3. 프로젝트 내에 build - generated 폴더하위에 "querydslDir" 변수로 설정한 폴더명칭확인.

 

4. Querydsl 관련 repository 상속

// < 엔티티클래스 , PK객체 타입 >
public interface BoardRepository extends JpaRepository<Board, Long>,
				QuerydslPredicateExecutor {
                
}

 

5. 간단한 예시 테스트

@Test
public void TestQuerydsl() {

	String keyword = "1" // 검색내용
    
    // Q도메인 객체 생성
    QBoard qBoard = QBoard.board;
    
   	// 검색쿼리용 컨테이너 생성
    BooleanBuilder builder = new BooleanBuilder();
    
    // 쿼리내용을 결정 
    // 제목에 1을 포함하는 게시글 찾기
    BooleanExpression expression1 = qBoard.title.contatin(keyword);
    // 자세한 내용은 API 참조
    // gt = greater than 줄임.
    // where bno > 0
    BooleanExpression expression2 = qBoard.bno.gt(0);
    
    // 두 조건을 합침
    BooleanExpression exAll = expression1.and(expression2);
    builder.and(exAll);
    
    Page<Board> list = repository.findAll(builder, pageable);
    
    list.stream().foreach( i -> log.info(i) );

}