JPA 56

[QueryDSL] 공통으로 사용하는 표현 - ComparableExpressionBase

QueryDSL은 JPQL 생성및실행을 담당하는 프레임워크이다. 개발자(클라이언트)가 원하는 JPQL을 QueryDSL에게 요청하려면 적절한 조건을 '표현'(Expression)해야 한다. '표현'(Expression)이라고 말한 이유는 QueryDSL이 실제로 클라이언트가 원하는 JPQL을 Expression 인터페이스로 표현할 수 있는 환경을 제공하고 있기 때문이다. 표현은 데이터 타입에 따라 분류된다. NumberExpression : avg, add, abs ... BooleanExpression : and, or, isTrue, isFalse ... StringExpression : concat, charAt, contains, append ... DateExpression : dayOfMont..

JPA/QueryDSL 2023.08.08

[QueryDSL] 공통으로 사용하는 표현 - LiteralExpression

[QueryDSL] Expression( 표현 ) [QueryDSL] QueryDSL 동작원리(3) - fetch QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 lordofkangs.tistory.com QueryDSL은 JPQL 생성및실행을 담당하는 프레임워크이다. 개발자(클라이언트)가 원하는 JPQL을 QueryDSL에게 요청하려면 적절한 조건을 '표현'(Expression)해야 한다. '표현'(Expression)이라고 말한 이유는 QueryDSL이 실제로 클라이언트가 원하는 JPQL을 Expression 인터페이스로 표현할 수 있는 환경을 제공하고 있기 때문이다. 표현은 ..

JPA/QueryDSL 2023.08.07

[QueryDSL] 결과조회 ( fetch )

[QueryDSL] QueryDSL 동작원리(3) - fetch QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성 lordofkangs.tistory.com 지난 포스팅에서 QueryDSL의 동작원리를 다루며 fetch의 의미를 알아보았다. 클라이언트 쪽 QueryDSL 코드 public List searchMember(MemberSearchCondition condition){ return queryFactory .select(member) // JPQL 데이터 설정 START .from(member) .leftJoin(member.team,..

JPA/QueryDSL 2023.08.07

[QueryDSL] 검색조건 ( where )

[QueryDSL] Expression( 표현 ) [QueryDSL] QueryDSL 동작원리(3) - fetch QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 lordofkangs.tistory.com 지난 포스팅에서 Expression을 다루어 보았다. 이번 포스팅에서는 where 메소드의 매개변수로 어떤 Expression이 들어가는지 알아보겠다. QueryDSL 코드 public List searchMember(MemberSearchCondition condition){ return queryFactory .select(member) .from(member) .leftJo..

JPA/QueryDSL 2023.08.07

[QueryDSL] Expression( 표현 )

[QueryDSL] QueryDSL 동작원리(3) - fetch QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성 lordofkangs.tistory.com QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 문제나 동적쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성을 위한 메타데이터만 설정하면 된다. QueryDSL은 유연한 데이터 설정을 지원하기 위해 빌더패턴 구조로 이루어져 있다. 여기까지가 지난 포스팅에서 다루었던 내용이다. 개발자(클라이언트)가 Q..

JPA/QueryDSL 2023.08.04

[QueryDSL] QueryDSL 동작원리(3) - fetch

QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성을 위한 메타데이터만 설정하면 되고 QueryDSL은 유연한 데이터 설정을 위해 빌더패턴 구조로 이루어져 있다. 여기까지 지난 포스팅에서 알아본 내용이다. [QueryDSL] QueryDSL 동작원리(1) - 빌더패턴 JPA에서 개발자가 원하는 엔티티를 얻으려면, JPQL을 작성하고 이를 EntityManager로 실행해야 한다. 이때 한 가지가 문제가 있는데, JPQL이 문자열이라는 점이다. JPQL이 문자열이기에 타입안정성 체크 lordofkangs.tistory.com [QueryDSL] Q..

JPA/QueryDSL 2023.08.02

[QueryDSL] QueryDSL 동작원리(2) - 메타데이터 설정하기

[QueryDSL] QueryDSL 동작원리(1) - 빌더패턴 JPA에서 개발자가 원하는 엔티티를 얻으려면, JPQL을 작성하고 이를 EntityManager로 실행해야 한다. 이때 한 가지가 문제가 있는데, JPQL이 문자열이라는 점이다. JPQL이 문자열이기에 타입안정성 체크 lordofkangs.tistory.com 지난 포스팅에서 QueryDSL이 빌더패턴 구조로 이루어진 이유에 대해서 다루어 보았다 . 이번 포스팅에서는 빌더패턴이 어떤 방식으로 구현되어 있는지 알아보겠다. 개발자가 문자열로 JPQL을 작성하면 타입 안정성 체크가 어렵고 동적 쿼리 생성이 직관적이지 못하다. 이를 위해, QueryDSL은 JPQL 생성및실행 권한을 자신에게 위임하고 개발자는 JPQL 생성에 필요한 데이터 설정만 하..

JPA/QueryDSL 2023.08.01

[QueryDSL] QueryDSL 동작원리(1) - 빌더패턴

JPA에서 개발자가 원하는 엔티티를 얻으려면, JPQL을 작성하고 EntityManager에 전달하여 실행하면 된다. 여기서 한 가지가 문제가 있는데, JPQL이 문자열이라는 점이다. JPQL이 문자열이기에 타입안정성 체크도 어렵고 동적쿼리 작성도 직관적이지 못하다. 이런 문제를 해결하기 위해, QueryDSL 프레임워크를 사용한다. 개발자가 직접 JPQL을 작성하지 않고 QueryDSL에게 요청하는 방식이다. 개발자는 QueryDSL이 제공하는 스펙에 따라 JPQL 데이터를 세팅하면 된다. QueryDSL의 프로세스는 개발자가 세팅한 데이터를 토대로 JPQL을 생성하고 EntityManager로 쿼리를 실행하여 결과를 반환한다. 이로써 개발자는 데이터 세팅에만 관여하고, JPQL 생성은 QueryDSL..

JPA/QueryDSL 2023.07.28

[QueryDSL] QueryDSL 설정하기 ( SpringBoot 2.6이상, SpringBoot 3.x )

QueryDSL 설정은 쉽지않다. 인프런 김영한 강사님의 QueryDSL 강의를 수강하고 있는 학생이라면 QueryDSL 설정에 어려움을 겪고 있을 것이라 예상된다. 아무래도 강사님이 사용하는 버전이 SpringBoot 2.2.2 버전과 QueryDSL 4.4.0 버전을 사용하고 있기에 그렇다. 현재 https://start.spring.io/ 에서 제공하는 SpringBoot 버전은 2.6 이상이거나 3.x 버전이다. - 스프링 부트 3.x 버전 - 스프링 부트 2.6 이상 버전 SpringBoot 2.6 이상, 3.x 버전 모두 QueryDSL 5.0.0 버전에 의존한다. 게다가 3.x 버전의 경우, 지원하는 패키지명이 javax에서 jakarta로 변경되었다. 이런 저런 이유로 현재 인터넷상에는 Q..

JPA/QueryDSL 2023.07.26

[QueryDSL] QueryDSL이란?

QueryDSL이란? DSL는 Domain Specific Language의 약자로, 특정 영역에 특화된 언어를 의미한다. 그런 의미에서 QueryDSL은 쿼리생성에 특화된 프레임워크를 의미한다. 그럼 QueryDSL이 필요한 이유는 무엇일까? JPA는 객체지향어플리케이션과 관계형DB 사이의 패러다임 불일치를 해결하는 프레임워크이다. 개발자는 객체지향 관점으로 개발하고 JPA프레임워크는 자동으로 SQL쿼리문을 생성한다. SQL문이 자동으로 생성되니 개발자는 SQL 관점 프로그래밍을 하지 않아도 된다. 그러나 완전한 분리는 불가능하다. 복잡한 쿼리 생성을 위해, JPA는 JPQL을 지원한다. [JPA] JPQL이란? JPA는 객체지향Application과 관계형DB 사이의 패러다임 불일치 문제를 해결한다...

JPA/QueryDSL 2023.07.21