본문 바로가기
Back-End/Spring

(1) QueryRepositorySupport

by 어렵다어려웡 2021. 3. 9.

메모 용도로 사용되는 포스팅입니다.


우선 기본적으로 기존에 사용하던 Querydsl 설정이 적용되어 있어야 한다.

 

일반적으로 기본적인 CRUD 는 QuerydslPredicateExecutor를 이용해서 사용이 가능하다.

like, between, gt 등등 여러가지를 사용해서 쿼리를 구성할수있는데

 

left outer join , inner join같은 조인이나 fetch를 사용할 수 없는 한계가 있으므로

JPQL로 검색하기위해서 JPQLQuery를 사용하여 처리할수있게

QuerydslRepositorySupport 라는 클래스를 상속해서 사용해야한다.

이것은 Querydsl 라이브러리를 직접 이용해서 구현할때 사용한다.

 

1. 인터페이스 와 해당 인터페이스를 구현할 클래스를 생성합니다.

 쿼리 메서드나 @Query로 처리할 수 없는 기능을 작성하게된다.

public interface SearchRepository {

}
public class SearchRepositoryImpl implements SearchRepository {

}

 

2. 구현 클래스에서 중요한 점은 QuerydslRepositorySupport 클래스를 상속해야 한다는 점이 있다.

해당 클래스는 생성자가 존재하므로 클래스 상속된 생성자의 특징에 의해서 기본생성자에서 super()를 호출해야한다.

이 때 도메인 클래스를 지정해야 하는데 null 값이 들어 갈 수 없다.

public class SearchRepositoryImpl extends QuerydslRepositorySupport 
	implements SearchRepository {
 
 	
    public SearchRepositoryImpl() {
    	super(Board.class);
    }
 
    
}

 

3. 해당 인터페이스를 확장하고 싶은 Repository에 상속시킨다.

// SearchRepository
// 해당 메서드를 추가. 
public Board search1();

// 확장하고자 하는 Repository
public interface BoardRepository extends SearchRepository {
 // 이하 생략 + 추가적인 구현체 및 상속 클래스 생략
}

3.1 search1() 메서드를 오버라이딩

public class SearchRepositoryImpl extends QuerydslRepositorySupport 
	implements SearchRepository {

	// 생략
    
    @Override
    public Board search1() {
    	// log.info("search...");
        System.out.println("search..");
        
        return null;
    }

}

3.2 테스트

// Test Class

	@Autowired
    private BoardRepository repository;

    @Test
    public void testSearch() {

       repository.search();
       
	}

4.  search 메서드 변경

JPQLQuery 인터페이스를 활용해서 쿼리를 작성하고 Querydsl을 실행해봅니다.

public class SearchRepository {

	// 구현, 상속 클래스 생략
    
    @Override
    public Board Search() {
    	
        // Q도메인 객체 생성
    	QBoard board = QBoard.board;
        
        JPQLQuery<Board> jpqlQuery = from(board);
        
        jpqlQuery.select(board).where(board.bno.eq(1L));
        
        log.info(jpqlQuery);
        
        return null;
    }
    
    // result ......
    //jpqlQuery => select b from Board b where b.bno = 1; 
    
}

JPQLQuery 를 통해서 간단하게 쿼리문을 작성할 수 있고 join 류의 조건도 처리시킬 수 있다.

 

'Back-End > Spring' 카테고리의 다른 글

Security OAuth 초기 설정 및 간단 설명  (0) 2021.03.11
(2) QuerydslRepositorySupport - Tuple 활용  (0) 2021.03.09
thymeleaf 사용 시 날짜포맷팅  (2) 2021.03.01
테스트폴더에 lombok 적용  (0) 2021.03.01
Querydsl 설정  (0) 2021.03.01