메모 용도로 사용되는 포스팅입니다.
우선 기본적으로 기존에 사용하던 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 |