거인의 코딩일지
[Query_DSL] Query_DSL 이란??? 본문
728x90
Query_DSL 이란 ??
- 하이버네이트 쿼리 언어(HQL)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임 워크
- 정적타입을 이용하여 SQL 과 같은 쿼리를 생성할 수 있게 해준다.
- 자바 백엔드 기술은 Spring Boot 와 Spring Data JPA 를 함께 사용한다 . 하지만 복잡한 쿼리, 동적 쿼리를 구현하는데 있어서 한계가 있기에 이러한 문제를 해결 할 수 있는 것이 Query DSL 이다 .
- 자바 코드로 SQL 문을 작성 할 수 있어 컴파일시에 오류를 발생하여 잘못된 쿼리가 실행되는 것을 방지 할 수 있다.
Query DSL 의 장점???
- 문자가 아닌 코드로 쿼리를 작성 할 수 있어 컴파일 시점에 문법 오류를 확인 할 수 있다.
- 인텔리제이와 같은 IDE 의 자동완성 기능의 도움을 받을 수 있다.
- 복잡한 쿼리나 동적쿼리 작성이 편리하다.
- 쿼리 작성시 제약조건등을 메서드 추출을 통하여 재사용 할 수 있다.
- JPQL 문법고 ㅏ유사한 형태로 작성 할 수 있어 쉽게 적응 할 수 있다.
- 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 들의 종류?!
- fetch() : 조회대상이 여러건일 경우 컬렉션을 반환한다.
- fetchOne() : 조회대상이 1건일 경우 generic 에 지정한 타입으로 반환한다. (1건 이상일 경우 에러)
- fetchFirst() : 조회대상이 1건이든 1건 이상이든 무조건 한건만 반환, 내부에서 보면 return limit(1).fetchOne()이다.
- fetchCount() : 개수를 조회하고 long타입을 반환한다.
- 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 |