Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

거인의 코딩일지

[Query_DSL] Query_DSL 이란??? 본문

코딩/JAVA

[Query_DSL] Query_DSL 이란???

코딩거인 2023. 9. 25. 09:52
728x90

Query_DSL 이란 ??

  • 하이버네이트 쿼리 언어(HQL)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임 워크
  • 정적타입을 이용하여 SQL 과 같은 쿼리를 생성할 수 있게 해준다.
  • 자바 백엔드 기술은 Spring Boot 와 Spring Data JPA 를 함께 사용한다 . 하지만 복잡한 쿼리, 동적 쿼리를 구현하는데 있어서 한계가 있기에 이러한 문제를 해결 할 수 있는 것이 Query DSL 이다 .
  • 자바 코드로 SQL 문을 작성 할 수 있어 컴파일시에 오류를 발생하여 잘못된 쿼리가 실행되는 것을 방지 할 수 있다.

 

Query DSL 의 장점???
  1. 문자가 아닌 코드로 쿼리를 작성 할 수 있어 컴파일 시점에 문법 오류를 확인 할 수 있다.
  2. 인텔리제이와 같은 IDE 의 자동완성 기능의 도움을 받을 수 있다.
  3. 복잡한 쿼리나 동적쿼리 작성이 편리하다.
  4. 쿼리 작성시 제약조건등을 메서드 추출을 통하여 재사용 할 수 있다.
  5. JPQL 문법고 ㅏ유사한 형태로 작성 할 수 있어 쉽게 적응 할 수 있다.
  6. Projections.bean 을 사용하게 되면 POJO 형식으로 변수 명으로 객체를 찾아서 가기 때문에 편하다.

 

POJO 란???

  • Plain Old Java Object 의 약자로 오래된 방식의 간단한 자바 오브젝트이다.
  • 즉! 다른 클래스나 인터페이스 상속/implements 를 받아 메서드가 추가된 클래스가 아닌  DTO, VO, BEAN 등 getter 와 setter 로만 이루어진 순수 자바 오브젝트 클래스임을 말한다.진정한 POJO란 객체지향적인 원리에 충실하며, 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.
  • 오래된 방식의 간단한 자바 오프젝트라는 말로 중량 프레임워크를 사용하게 되면서 해당 프레임 워크에 종속된 무거운 객체를 만들게 된 것에 반발하며 사용하기 시작한 용어이다.
POJO와 JAVA Bean 의 차이
  • Java Bean은 POJO이다.
  • POJO는 Java Bean 이 아니다.
  • POJO 는 Java bean 보다 범주가 더 넓은 개념이다.

Fetch 들의 종류?!
  1. fetch() : 조회대상이 여러건일 경우 컬렉션을 반환한다.
  2. fetchOne() : 조회대상이 1건일 경우 generic 에 지정한 타입으로 반환한다. (1건 이상일 경우 에러)
  3. fetchFirst() : 조회대상이 1건이든 1건 이상이든 무조건 한건만 반환, 내부에서 보면 return limit(1).fetchOne()이다.
  4. fetchCount() :  개수를 조회하고 long타입을 반환한다.
  5. fetchResults() : 조회한 리스트 + 전체 개수를 포함한 QueryResults 반환, (Count 쿼리가 추가로 실행된다.)
728x90

'코딩 > JAVA' 카테고리의 다른 글

[Spring] 다양한 의존성 주입 방법  (0) 2023.09.27
[Annotation] @CrossOrigin 이란?  (0) 2023.09.25
[JPA_Query DSL] BooleanBuilder, BooleanExpression 차이  (0) 2023.09.25
[JPA] N+1 문제??  (2) 2023.08.31
[JPA] 영속성 컨텍스트란?  (0) 2023.08.24