QueryDsl 도메인 생성
엔티티 생성 QueryDsl을 실제 사용하기에 앞서 쿼리에서 사용할 엔티티를 두 개 만들었다. 엔티티 테스트 그 후 연관관계나 세팅 등이 잘 됐는지 간단한 테스트를 실행해본다. in-memory DB 세팅 참고
dongb.tistory.com
앞선 포스트에서 만든 엔티티를 이용해 JPQL과 Querydsl을 비교해보겠다.
member와 team세팅 같은 작업은 BasicTest라는 코드를 만들어 적어두고 실제 테스트 코드에서 BasicTest를 상속하는 형태로 작성했다.

JPQL
먼저 memberName이 member1과 같은 멤버를 찾는 코드를 JPQL로 작성해보았다.

setParameter로 파라미터 바인딩을 통해 해당하는 member를 찾는 형태이다.
Querydsl
위와 같은 내용을 querydsl로 작성해보았다.

select나 where와 같은 쿼리가 코드로 되어 있어 이것을 사용해 쿼리를 작성하는 것을 볼 수 있다.
JPQL, Querydsl 비교
두 코드의 차이점은 다음과 같다.
- Querydsl은 파라미터 바인딩을 하지 않더라도 자동으로 바인딩이 된다. SQL injection에서 장점을 가진다.
- JPQL에서 쿼리를 잘못 입력하면 이 메서드를 호출했을 때에서야 쿼리가 잘못된 것을 알아차릴 수 있다. 반면 Querydsl은 컴파일 시점에 잘못된 쿼리를 알 수 있다.
JPAQueryFactory는 동시성 문제가 없기 때문에
필드로 빼서 사용해도 동시성 문제가 발생하지 않는다.
QueryDsl 도메인 생성
엔티티 생성 QueryDsl을 실제 사용하기에 앞서 쿼리에서 사용할 엔티티를 두 개 만들었다. 엔티티 테스트 그 후 연관관계나 세팅 등이 잘 됐는지 간단한 테스트를 실행해본다. in-memory DB 세팅 참고
dongb.tistory.com
앞선 포스트에서 만든 엔티티를 이용해 JPQL과 Querydsl을 비교해보겠다.
member와 team세팅 같은 작업은 BasicTest라는 코드를 만들어 적어두고 실제 테스트 코드에서 BasicTest를 상속하는 형태로 작성했다.

JPQL
먼저 memberName이 member1과 같은 멤버를 찾는 코드를 JPQL로 작성해보았다.

setParameter로 파라미터 바인딩을 통해 해당하는 member를 찾는 형태이다.
Querydsl
위와 같은 내용을 querydsl로 작성해보았다.

select나 where와 같은 쿼리가 코드로 되어 있어 이것을 사용해 쿼리를 작성하는 것을 볼 수 있다.
JPQL, Querydsl 비교
두 코드의 차이점은 다음과 같다.
- Querydsl은 파라미터 바인딩을 하지 않더라도 자동으로 바인딩이 된다. SQL injection에서 장점을 가진다.
- JPQL에서 쿼리를 잘못 입력하면 이 메서드를 호출했을 때에서야 쿼리가 잘못된 것을 알아차릴 수 있다. 반면 Querydsl은 컴파일 시점에 잘못된 쿼리를 알 수 있다.
JPAQueryFactory는 동시성 문제가 없기 때문에
필드로 빼서 사용해도 동시성 문제가 발생하지 않는다.