이전
QueryDSL (type-safe Query)
문제
긴급 요구사항
- 검색 조건 추가
- 나이
- 이름
- 퇴근시간 10분전…
쿼리 추가
String sql =
“select * from member” +
“where name like ?” +
“and age between ? and ?”
컴파일 완료-> 배포완료-> 퇴근완료-> 버그발생-> !!
문자를 합치면
“select * from memberwhere name like ?and age between ? and ?”
QUERY 의 문제점
- QUERY 는 문자, Type-check 불가능
- 실행하기 전까지 작동여부 확인 불가
에러는 크게 2가지
- 컴파일 에러 (좋은 에러)
- 런타임 에러 (나쁜 에러)
SQL, JPQL
만약 SQL 이 클래스처럼 타입이 있고 자바 코드로 작성 할 수 있다면?
Type-safe
- 컴파일시 에러 체크 가능
- Code-assistant x 100 !!!
- CTRL + SPACE + . (DOT)
QueryDSL
- 쿼리를 Java 로 type-safe 하게 개발할 수 있게 지원 하는 프레임워크
- 주로 JPA 쿼리(JPQL)에 사용
JPA Query (java ORM)
질문 : 사람을 찾아보자
- 20~40살
- 성 = 김씨
- 나이 많은 순서
- 3명을 출력하라
JPA 에서 QUERY 방법은 크게 3가지
- JPQL (HQL)
- 장점 : SQL QUERY 와 비슷해서 금방 익숙해짐
- 단점 : type-safe 아님 동적쿼리 생성이 어려움
- Criteria API
- 장점 : 동적쿼리 생성이 쉬움??
- 단점 : type-safe 아님, 너무 너무 너무 복잡함, 알아야 할게 너무 많음
- MetaModel Criteria API(type-safe)
- Criteria API + MetaModel, Criteria API 와 거의 동일, 복잡하긴 마차가지
이건 아니야ㅡㅡ; -timowest-
QueryDSL?
###DSL
- 도메인 + 특화 + 언어
- 특정한 도메인에 초점에 맞춘 제한적인 표현력을 가진 컴퓨터 프로그래밍 언어
- 특징 : 단순, 간결, 유창
QueryDSL
- 쿼리 + 도메인 + 특화 + 언어
- 쿼리에 특화된 프로그래밍 언어
- 단순, 간결, 유창
- 다양한 저장소 쿼리 기능 통합
- JPA, MongoDB, SQL 같은 기술들을 위해 type-safe SQL을 만드는 프레임워크
QueryDSL - JPA
- Querydsl 은 JAP(JPQL)을 typesafe 하게 작성하는데 많이 사용됨
QUERYDSL -> JPQL -> SQL
장점
- type-safe
- 단순함
- 쉬움
단점
- Q코드 생성을 위한 APT 를 설정해야함
SpringDataJAP + Querydsl
- SpringData 프로젝트의 약점은 조회
- Querydsl 로 복잡한 조회 기능 보완
- 복잡한 쿼리
- 동적 쿼리
- 단순한 겅우 : SpringDataJPA
- 복잡한 경우 : Querydsl 직접 사용
QueryDSL 결론
- 한번 써보면 돌아 올 수 없음
- 감동의 컴파일 에러
- 감동의 IDE 지원, ctrl+space, Code-assistant
- JPQL 로 해결하기 어려운 복잡한 쿼리는 네이티브 SQL 쿼리사용 (JdbcTemplate, Mybatis)