Repository 에서 Querydsl 사용하기
- Querydsl 을 사용하기 위해서는 JPAQueryFactory 가 필요한데 Querydsl 을 사용하는 Repository에서 주입받으려면 불편합니다.
- 따라서 Config를 생성하여 JPAQueryFactory를 bean 으롤 등록하고 사용할 Repository에서 생성자 주입을 받습니다.
package com.example.demo.config;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Configuration
public class querydslConfig {
@PersistenceContext
private EntityManager em;
@Bean
public JPAQueryFactory jpaQueryFactory(){
return new JPAQueryFactory(em);
}
}
- 참고로 동시성 문제는 없습니다. 스프링이 주입해주는 EntityManger 는 실제 동작 시점에 진짜 EntityManager 를 찾아주는 proxy용 EntityManager 입니다.실제 사용 시점에서 트랜잭션 단위에 있는 EntityManager를 주입 받아 영속성 컨텍스트를 사용하기 때문에 동시성 무제는 발생하지 않습니다.
Querydsl 사용하기
@Repository
@RequiredArgsConstructor
public class MemberQueryRepository{
private final JPAQueryFactory queryFactory;
public List<Member> findALl(){
return queryFactory
.selectFrom(member)
.fetch();
}
public List<Member> findByUsername(String username){
return queryFactory
.selectFrom(member)
.where(member.username.eq(username)
.fetch();
}
- Querydsl을 사용하기 위하여 필요한 JPAQuerydsl 생성자 주입