Querydsl - Querydsl 설정,예제도메인, 기본문법(1)

LEE ·2023년 9월 14일

Querydsl

목록 보기
1/10

1. Querydsl 설정

1-1. build.gradle 에 querydsl 설정 추가

1-2. 검증용 Q 타입 생성

다음과 같은 경로에 생성된다.

생성된 예제 Q타입


2. 예제도메인

Member 엔티티


롬복 설명

@Setter: 실무에서 가급적 Setter는 사용하지 않기

@NoArgsConstructor AccessLevel.PROTECTED: 기본 생성자 막고 싶은데, JPA 스팩상PROTECTED로 열어두어야 함

@ToString은 가급적 내부 필드만(연관관계 없는 필드만)

changeTeam() 으로 양방향 연관관계 한번에 처리(연관관계 편의 메소드)

Team 엔티티

Member와 Team은 양방향 연관관계, Member.team 이 연관관계의 주인, Team.members 는 연관관계의

주인이 아님, 따라서 Member.team 이 데이터베이스 외래키 값을 변경, 반대편은 읽기만 가능


3. 기본문법( JPQL vs Querydsl )

참조 : 테스트 기본 코드

@BeforeEach 는 테스트를 진행하기전 실행시키는 메서드로 테스트를 진행하기 전에 먼저 데이터를 넣기위해 작성하였다.

3-1. Querydsl vs JPQL


EntityManager 로 JPAQueryFactory 생성

Querydsl은 JPQL 빌더

JPQL: 문자(실행 시점 오류), Querydsl: 코드(컴파일 시점 오류)

JPQL: 파라미터 바인딩 직접, Querydsl: 파라미터 바인딩 자동 처리

3-2. JPAQueryFactory를 필드로

JPAQueryFactory를 필드로 제공하면 동시성 문제는 어떻게 될까?

동시성 문제는 JPAQueryFactory를 생성할 때 제공하는 EntityManager(em)에 달려있다. 스프링 프레임워크는 여러 쓰레드에서 동시에 같은 EntityManager에 접근해도, 트랜잭션 마다 별도의 영속성 컨텍스트를 제공하기 때문에, 동시성 문제는 걱정하지 않아도 된다.

3-3. 기본 Q-Type 활용

다음 설정을 추가하면 실행되는 JPQL을 볼 수 있다.

참고: 같은 테이블을 조인해야 하는 경우가 아니면 기본 인스턴스를 사용하자.

0개의 댓글