1. from() : SQL의 FROM 구문과 동일한 기능. 특정 테이블이나 엔티티를 지정할 수 있다.
List<String> bookTitles = queryFactory
.select(book.title)
.from(book)
.fetch();
2. select() : SQL의 select 구문과 동일한 기능. 특정 엔티티 또는 필드를 조회할 수 있다.
List<String> bookTitles = queryFactory
.select(book.title)
.from(book)
.fetch();
3.selectFrom() : select() + from() 결합 메서드. 즉, 조회할 엔티티를 바로 선택하면서 쿼리를 시작.
List<Book> books = queryFactory
.selectFrom(book)
.fetch();
4. where() : 검색 조건을 설정, 여러 조건을 동시에 설정할 수 있음.
List<Book> books = queryFactory
.selectFrom(book)
.where(book.price.goe(20.0),
book.title.like("%Hobbit%"))
.fetch();
5. leftJoin(좌측 엔티티or테이블, 우측테이블) : SQL의 LEFT JOIN 구문과 동일한 기능을 수행.
이 메서드를 사용하여 주어진 엔티티나 테이블에 대해 LEFT JOIN을 수행할 수 있다.
List<Tuple> result = queryFactory
.select(book, author)
.from(book)
.leftJoin(book.author, author)
.fetch();
주로 두 테이블에서 관련된 데이터를 모두 선택할 때 사용한다.
"왼쪽 테이블"의 모든 레코드(가로, 행)를 반환하고, "오른쪽 테이블"의 일치하는 레코드를 반환.
만약 일치하는 레코드가 없다면, "왼쪽 테이블"의 모든 레코드와 함께 null을 반환.
Ex. 'Book' 테이블, 'Author' 테이블. 각각의 책에 대한 작가의 정보를 조회하려는 상황.
<Library 테이블>
libraryName, List<libraryBook> libraryBooks
<LibraryBook 테이블>
Book.BookStatus, library, book
이 두 테이블을 LEFT JOIN 하면, "왼쪽" Library 테이블의 모든 데이터와
이와 일치하는 "오른쪽" LibraryBook 테이블의 데이터를 함께 조회할 수 있다.
만약 Library에 해당하는 LibraryBook이 LibraryBook 테이블에 없다면, 해당 책은 NULL 이 반환.
List<Library> libraries = queryFactory
.selectFrom(library)
.leftJoin(library.libraryBooks, libraryBook)
.fetch();
Library 테이블의 libraryBooks 필드와 LibraryBook 테이블을 LEFT JOIN하여,
각 도서관에 대응되는 도서관에 보관중인 책(libraryBook)을 가져온다.
만약 도서관에 보관중인 책 중, AVAILABLE 상태만 가져오려면
List<Library> libraries = queryFactory
.selectFrom(library)
.leftJoin(library.libraryBooks, libraryBook)
.on(libraryBook.bookStatus.eq(Book.BookStatus.AVAILABLE))
.fetch();
6. on() : 이 메서드는 JOIN시 조인 조건을 지정하는데 사용.
List<Tuple> result = queryFactory
.select(book, author)
.from(book)
.leftJoin(author).on(book.authorId.eq(author.id))
.fetch();
7. orderBy() : SQL의 ORDER BY 구문과 동일한 기능. 결과를 특정 필드를 기준으로 정렬.
List<Book> books = queryFactory
.selectFrom(book)
.orderBy(book.price.desc())
.fetch();
8. offset() : 결과 집합의 시작 위치를 지정. 페이징 처리를 위해 주로 사용되며 SQL의 OFFSET과 동일
List<Book> books = queryFactory
.selectFrom(book)
.offset(10) // skip the first 10
.fetch();
9. limit() : 결과 집합에서 가져올 행의 수를 제한. SQL의 LIMIT 구문과 동일한 기능
List<Book> books = queryFactory
.selectFrom(book)
.limit(5) // only fetch top 5
.fetch();
10. and() : 여러 조건을 모두 만족해야 하는 조건을 설정.
List<Book> books = queryFactory
.selectFrom(book)
.where(book.price.goe(20.0)
.and(book.title.like("%Hobbit%")))
.fetch();
<where()의 , 조건추가 VS .and() 차이 >
where()에서 , 로 여러 조건을 넣는 경우는 여러 조건을 동시에 받아 각 조건이 모두 충족되는 경우에 해당.
and()에서는 첫번째 조건에 이어 추가 조건을 명시.
즉, 기본적으로 where()에서 , 로 조건을 걸든, .and()를 사용해서 추가 조건 생성하든 동일한 결과를 제공.
11. or() : 여러 조건 중 하나라도 만족하면 되는 조건을 설정
List<Book> books = queryFactory
.selectFrom(book)
.where(book.price.goe(20.0)
.or(book.title.like("%Hobbit%")))
.fetch();
12. eq() : 필드의 값이 특정 값과 같은지 검사
book.title.eq("The Hobbit")
13. ne() : 필드의 값이 특정 값과 다른지 검사
book.title.ne("The Hobbit")
14. goe() >= 이상, gte() > 초과 : 필드의 값이 특정 값보다 크거나 같은지 검사
book.price.goe(20.0)
book.price.gte(20.0)
15. loe() <= 이하, lte() < 미만 : 필드의 값이 특정 값보다 작거나 같은지 검사
book.price.loe(20.0)
book.price.lte(20.0)
16. between() : 필드의 값이 두 값 사이에 있는지 검사.
book.price.between(10.0, 20.0)
17. isNull(), isNotNull() : 필드의 값이 null 인지, null이 아닌지 검사.
book.publisher.isNull()
book.publisher.isNotNull()
18. like() : 필드의 값이 특정 패턴과 일치하는지 검사 (제목에 Hobbit이 포함된 책)
book.title.like("%Hobbit%")
19. in() : 필드의 값이 특정 리스트에 포함되는지 검사 (필드의 장르가 리스트의 내용에 들어가는지)
book.genre.in(Arrays.asList("Fantasy", "Adventure"))
'Tips' 카테고리의 다른 글
JMeter 설치 & 사용 법 (0) | 2023.05.25 |
---|---|
JUnit Test 코드 TIP (0) | 2023.05.16 |
Spring Data JPA VS JPQL and QueryDsl (0) | 2023.05.15 |
Mapstruct @Mapping(target = , source = ) (0) | 2023.05.13 |
Spring Data JPA - 자동 완성 메서드 규칙 (0) | 2023.05.12 |