Develop/spring-data

Spring Data JPA 기반 Querydsl란?

에디개발자 2020. 11. 6. 08:44
반응형

이제서야 적용해본다 Querydsl!!

 

기존 프로젝트에서는 mybatis를 사용했다. mybatis는 Mapper.java, mapper.xml 파일을 만들어 namespace로 연결하여 사용하는 방식이었다. 개발자1로써 크게 불편함을 느끼지 않고 쓰고 있었다. 그런데 Querydsl이 나오고 신세계를 경험했다. 

 Querydsl 장점

  • 대표적으로 type-safe이다. 자세한 내용은 밑에서 다루겠습니다.
  • 잘못된 쿼리를 xml에 작성 후 build해도 에러는 발생하지 않는다. 실제 쿼리를 호출해야 그제서야 에러가 발생한다. 이런 문제를 사전에 방지 할 수 있다.
SELECT * FROM store  -- xml에서는 에러 발생하지 않는다.

 

  • java의 enum, constant를 이용해 type이 의미하는 바를 한눈에 알아볼 수 있음
-- *.xml
select * from store where type = 1  -- type이 의미하는게 무엇일까??
// querydsl
selectFrom(store).where(store.type.eq(storeConstant.영업중))  -- 타입이 의미하는 바를 알 수 있다. 

 

  • column의 타입을 알 수 있다.
// *.xml
select * from store where type = ??? -- type이 무슨 타입인지 확인하려면 ddl 확인
// querydsl
selectFrom(store).where(store.type.eq(new Integer(1)))  -- type 컬럼이 Integer 타입인걸 바로 알 수 있다.

 

사용방법

1. Table 별로 Entity를 생성한다.

 

2. APT를 이용하여 Entity 기반으로 querydsl plugin을 실행시키면 prefix "Q"가 붙는 큐클래스가 생성된다.  

Store -> QStore
APT란?
Annotation Processing Tool의 약자이다.
Annotation이 있는 코드기준으로 새로운 파일을 만들 수 있고 complie 기능도 가능하다.

 

3. 생성된 큐클래스를 사용하여 type-safe한 querydsl을 생성한다.

 

4. querydsl을 실행하면 내부에서 JPQL을 생성한다. 

JPQL이란?
  - Java Persistence Query Language의 약어이다.
  - JPA의 일부로 독립적인 객체지향 쿼리 언어이다.
  - 관계형 데이터베이스의 엔티티에 대한 쿼리를 만드는데 사용된다.
  - 데이터베이스에 다이렉트로 연결되지 않고 JPA엔티티에 대해서 작동한다.

 

5. SQL을 생성하여 Database에 직접 쿼리를 사용하여 조회한다.

Querydsl -> JPQL -> SQL

 

Querydsl은 gradle설정잡는게 어려운 편이다. 실제 구글링해도 몇일씩 걸리면서 세팅하시는 분이 많다. 그래서 다음글에 세팅하는 방법과 왜 어려운건지 실제 어떻게 적용하는지 정리할 예정입니다.

 

 

 

 

 

 

반응형