Skip to content

Commit

Permalink
Create TIL221229.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wjddntjr555w authored Dec 29, 2022
1 parent 4c8d019 commit 1f80edf
Showing 1 changed file with 107 additions and 0 deletions.
107 changes: 107 additions & 0 deletions TIL221229.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# Daily to do list
## Java

- - -
## Spring

-- - -
## CS

- - -
## 알고리즘

---------
# 오늘의 회고

221229 SPRING JPA QueryDsl

QueryDSL

상황 부여 :
갑자기 퇴근 전에.. 검색 조건을 추가해달ㄹ라고 한다면?
sql은 그냥 조건만 추가해주면 된다..

하지만.. 이렇게 작성한다면 띄어쓰기가 없어서 다붙어서 문법 오류 발생

Query의 문제점 :
Query는 문자, Type-Check 불가능

에러는 크게 2가지 :
컴파일 에러! (좋은 에러)
런타임 에러! (나쁜 에러)

만약 SQL이 클래스처럼 타입이 있고 자바 코드로 작성 할 수 있다면?
즉, type-safe 하다면 ?
컴파일 시 에러 체크 가능!!
Code-Assistant 가능..

QueryDSL은 쿼리를 Java로 type-safe하게 개발할 수 있게 지원하는 프레임워크
주로 JPA 쿼리(JPQL)에 사용
———————
JPQL :
장점 : SQL Query와 비슷해서 금방 익숙해짐, 단점 : type-safe아님, 동적 쿼리 생성이 어려움

———————————
QueryDSL 분석

DSL은 도메인 특화 언어(Domain Specific Language)

특정한 도메인에 초점을 맞춘 제한적인 표현력을 가진 프로그래밍 언어
특징 : 단순 간결 유창

데이터 쿼리 기능 추상화를 하고자 나온 기술!

Querydsl-JPA JPA쿼리를 typesafe하게 작성하는데 많이 사용됨

Querydsl >> (생성) >> JPQL >> (생성) >> SQL
Querydsl은 JPQL을 만들어주는 빌더다!!
즉, JPQL을 먼저 알아야 한다.
단점은 Q코드 생성을 위한 APT를 설정해야함

동적쿼리를 깔끔하게 짤 수 있다!! (조인 쿼리,페이징 등 도 당연히 가능)
두 조합으로 복잡한 조회 기능을 Querydsl이 보완해줌

한번 써보면 돌아올 수 없다..
감동의 컴파일 에러..
JPQL로 해결하기 어려운 복잡한 쿼리는 네이티브 SQL 쿼리 사용!
(JdbcTemplate, MyBatis)

———————————
Querydsl 설정




Querydsl은 설정하는 부분이 조금 귀찮지만 환경에 따라 설정이 다리고.. 버전업하거나 해도 설정이 달라지지만 ‘’querydsl gradle’로 검색하면 본인 환경에 맞는 대안을 금방 찾을 수 있다!

마지막에 fech를 하면 리스트 형식으로 나옴

이런식으로 Builder를 동적쿼리를 생성할 수 있다.


이런식으로 동적쿼리들을 함수형으로 만들어서 조건을 추가할수도 있다.
소스코드가 훨씬 깔끔해진다.

where절에서 null을 입력하면 해당 조건은 무시, 콤마로 구분하여 and조건으로 처리됨

쿼리 조건을 부분적으로 모듈화가 가능하다!

- 예외 변환
Querydsl은 따로 예외 추상화를 지원하지 않지만 @Repository를 사용하여 추상화 처리가 된다.

———————————
정리
Querydsl장점
동적 쿼리를 매우 깔끔하게 사용할 수 있다
쿼리 문장에 오류가 있어도 컴파일 오류로 알려준다!!
메서드를 추출을해서 코드를 재사용할 수 있다. (조건을 함수로 만든 것)

0 comments on commit 1f80edf

Please sign in to comment.