[Spring Boot] QueryDsl 설정 방법
Spring Boot에서 QueryDsl을 설정하는 방법에 대해 알아보도록 하겠다.QueryDsl은 쿼리문을 함수 형식으로 작성 하도록 되어있다. Mybatis나 JPA nativeQuery를 사용해 직접 잘못된 쿼리문을 사용했을 때 컴파일시 오류가 발생하지 않고 런타임시 오류가 발생하는 단점이 있지만 QueryDsl은 정해진 함수만 사용하려 쿼리문을 잘못 작성 하는 실수를 줄이고 잘못 작성 되었을 경우 컴파일시 에러가 발생해 오류를 쉽게 찾을 수 있다.
[수행 환경]
Windows 10 IntelliJ java 11 gradle-7.6 |
[Gradle 설정] |
..... dependencies { .... //queryDSL implementation 'com.querydsl:querydsl-jpa' implementation 'com.querydsl:querydsl-core' implementation 'com.querydsl:querydsl-collections' implementation "com.querydsl:querydsl-sql:${dependencyManagement.importedProperties['querydsl.version']}" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' } def generated = 'src/main/generated' tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) } sourceSets { main.java.srcDirs += [generated] } clean { delete file(generated) } |
[예제] ConnInfo Entity 작 |
import lombok.*; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import java.time.LocalDateTime; @Entity @Setter @Getter @Builder @NoArgsConstructor @AllArgsConstructor public class ConnInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer seq; private String id; private String ip; private LocalDateTime sysCreateDt; } |
[예제] CustomConnInfoRepository 인터페이스 작성 |
public interface CustomConnInfoRepository { ConnInfo findSeq(Integer seq); } |
[예제] CustomConnInfoRepositoryImpl 클래스 작성 |
@Slf4j public class CustomConnInfoRepositoryImpl implements CustomConnInfoRepository { JPAQueryFactory query; public CustomConnInfoRepositoryImpl(EntityManager em) {query = new JPAQueryFactory(em);} @Override public ConnInfo findSeq(Integer seq) { ConnInfo connInfo = query.selectFrom(QConnInfo.connInfo) //<--- QueryDSL 사용하는 부분 .where( QConnInfo.connInfo.seq.eq(seq) ) .fetchOne(); return connInfo; } } |
[예제] ConnInfoRepository 인터페이스 작성 |
// JPA에 CustomConnInfoRepository 인터페이스를 상속 받는다. public interface ConnInfoRepository extends JpaRepository<ConnInfo, Integer>, CustomConnInfoRepository { } |
[예제] queryDsl 사용 부분 호출 |
//Repository는 보통 Service에서 호출하므로 위에서 구현한 함수도 Service ConnInfo seq = connInfoRepository.findSeq(1); |
호출시 Seq 값이 1인 ConnInfo 정보를 리턴 한다. |
'프로그램 > Spring Boot' 카테고리의 다른 글
[Spring Boot] JPA 설정 및 사용 방법 (0) | 2023.07.16 |
---|---|
[Spring Boot] Intellij를 이용한 Entity 자동 생성 (0) | 2023.07.15 |
[Spring Boot] 이미지 캐싱, CDN 기능 설정 (0) | 2023.07.10 |
[Spring Boot] swagger 설정 방법 (0) | 2023.07.09 |
[Spring Boot] Feign Client 사용법 (0) | 2023.07.04 |