build.gradle
/*
* queryDSL 설정 추가
*/
// querydsl에서 사용할 경로 설정
def querydslDir = "$buildDir/generated/querydsl"
// JPA 사용 여부와 사용할 경로를 설정
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
// build 시 사용할 sourceSet 추가
sourceSets {
main.java.srcDir querydslDir
}
// querydsl 컴파일시 사용할 옵션 설정
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
// querydsl 이 compileClassPath 를 상속하도록 설정
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
plugin INFO
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
implementation "com.querydsl:querydsl-jpa:4.4.0"
implementation "com.querydsl:querydsl-apt:4.4.0"
implementation group: 'ch.simas.qlrm', name: 'qlrm', version: '1.7.1'
config
@Configuration
public class QuerydslConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
QueryDSL
public Page<RoomInfo> findByStatus(String status, Pageable paging){
List<RoomInfo> roomInfos = queryFactory
.select(Projections.constructor(RoomInfo.class,
roomMasterEntity.roomId,
roomMasterEntity.roomName,
roomMasterEntity.roomPrivateYn,
roomMasterEntity.roomPassword,
memberMasterEntity.memId,
memberMasterEntity.profileImgUrl,
memberMasterEntity.nickName))
.from(roomMasterEntity)
.innerJoin(memberMasterEntity)
.on(roomMasterEntity.creator.eq(memberMasterEntity.memId))
.where(roomMasterEntity.status.eq(status))
.offset(paging.getOffset())
.limit(paging.getPageSize())
.fetch();
Long count = queryFactory
.select(roomMasterEntity.count())
.from(roomMasterEntity)
.innerJoin(memberMasterEntity)
.on(roomMasterEntity.creator.eq(memberMasterEntity.memId))
.where(roomMasterEntity.status.eq(status))
.fetchOne();
return new PageImpl<>(roomInfos, paging, count);
Entity 변경 시 반드시 compileQuerydsl 실행하여 갱신하기
Gradle에서 compileQuerydsl을 더블 클릭하여 실행하기.
'JPA & SQL' 카테고리의 다른 글
[MySQL Workbench] 개행문자 넣는 방법 (feat. MariaDB) (0) | 2022.11.24 |
---|---|
[MySQL Workbench] 테이블에 Null 값 넣기 (0) | 2022.10.05 |
[JPA] JPA 반환타입 정리 (0) | 2022.07.21 |
[JPA/SQL] 현재 시간과 비교해서 데이터 가져오기 (0) | 2022.07.20 |
[MySQL] MySQL 데이터 타입과 Java 데이터 타입 비교/매칭 (4) | 2022.07.14 |