[JPA] Repository 에서 Querydsl 사용하기

윤재열·2022년 9월 24일
0

JPA

목록 보기
16/21
post-custom-banner

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; // 1
    
    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();
            }
    1. Querydsl을 사용하기 위하여 필요한 JPAQuerydsl 생성자 주입
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글